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
@@ -70,12 +70,12 @@ GIT_EXTERN(int) git_revparse_ext(
70
70
  */
71
71
  typedef enum {
72
72
  /** The spec targeted a single object. */
73
- GIT_REVPARSE_SINGLE = 1 << 0,
73
+ GIT_REVSPEC_SINGLE = 1 << 0,
74
74
  /** The spec targeted a range of commits. */
75
- GIT_REVPARSE_RANGE = 1 << 1,
75
+ GIT_REVSPEC_RANGE = 1 << 1,
76
76
  /** The spec used the '...' operator, which invokes special semantics. */
77
- GIT_REVPARSE_MERGE_BASE = 1 << 2,
78
- } git_revparse_mode_t;
77
+ GIT_REVSPEC_MERGE_BASE = 1 << 2,
78
+ } git_revspec_t;
79
79
 
80
80
  /**
81
81
  * Git Revision Spec: output of a `git_revparse` operation
@@ -85,7 +85,7 @@ typedef struct {
85
85
  git_object *from;
86
86
  /** The right element of the revspec; must be freed by the user */
87
87
  git_object *to;
88
- /** The intent of the revspec (i.e. `git_revparse_mode_t` flags) */
88
+ /** The intent of the revspec (i.e. `git_revspec_mode_t` flags) */
89
89
  unsigned int flags;
90
90
  } git_revspec;
91
91
 
@@ -69,89 +69,141 @@ typedef int GIT_CALLBACK(git_status_cb)(
69
69
  * With `git_status_foreach_ext`, this will control which changes get
70
70
  * callbacks. With `git_status_list_new`, these will control which
71
71
  * changes are included in the list.
72
- *
73
- * - GIT_STATUS_SHOW_INDEX_AND_WORKDIR is the default. This roughly
74
- * matches `git status --porcelain` regarding which files are
75
- * included and in what order.
76
- * - GIT_STATUS_SHOW_INDEX_ONLY only gives status based on HEAD to index
77
- * comparison, not looking at working directory changes.
78
- * - GIT_STATUS_SHOW_WORKDIR_ONLY only gives status based on index to
79
- * working directory comparison, not comparing the index to the HEAD.
80
72
  */
81
73
  typedef enum {
74
+ /**
75
+ * The default. This roughly matches `git status --porcelain` regarding
76
+ * which files are included and in what order.
77
+ */
82
78
  GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0,
79
+
80
+ /**
81
+ * Only gives status based on HEAD to index comparison, not looking at
82
+ * working directory changes.
83
+ */
83
84
  GIT_STATUS_SHOW_INDEX_ONLY = 1,
85
+
86
+ /**
87
+ * Only gives status based on index to working directory comparison,
88
+ * not comparing the index to the HEAD.
89
+ */
84
90
  GIT_STATUS_SHOW_WORKDIR_ONLY = 2,
85
91
  } git_status_show_t;
86
92
 
87
93
  /**
88
94
  * Flags to control status callbacks
89
95
  *
90
- * - GIT_STATUS_OPT_INCLUDE_UNTRACKED says that callbacks should be made
91
- * on untracked files. These will only be made if the workdir files are
92
- * included in the status "show" option.
93
- * - GIT_STATUS_OPT_INCLUDE_IGNORED says that ignored files get callbacks.
94
- * Again, these callbacks will only be made if the workdir files are
95
- * included in the status "show" option.
96
- * - GIT_STATUS_OPT_INCLUDE_UNMODIFIED indicates that callback should be
97
- * made even on unmodified files.
98
- * - GIT_STATUS_OPT_EXCLUDE_SUBMODULES indicates that submodules should be
99
- * skipped. This only applies if there are no pending typechanges to
100
- * the submodule (either from or to another type).
101
- * - GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS indicates that all files in
102
- * untracked directories should be included. Normally if an entire
103
- * directory is new, then just the top-level directory is included (with
104
- * a trailing slash on the entry name). This flag says to include all
105
- * of the individual files in the directory instead.
106
- * - GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH indicates that the given path
107
- * should be treated as a literal path, and not as a pathspec pattern.
108
- * - GIT_STATUS_OPT_RECURSE_IGNORED_DIRS indicates that the contents of
109
- * ignored directories should be included in the status. This is like
110
- * doing `git ls-files -o -i --exclude-standard` with core git.
111
- * - GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX indicates that rename detection
112
- * should be processed between the head and the index and enables
113
- * the GIT_STATUS_INDEX_RENAMED as a possible status flag.
114
- * - GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR indicates that rename
115
- * detection should be run between the index and the working directory
116
- * and enabled GIT_STATUS_WT_RENAMED as a possible status flag.
117
- * - GIT_STATUS_OPT_SORT_CASE_SENSITIVELY overrides the native case
118
- * sensitivity for the file system and forces the output to be in
119
- * case-sensitive order
120
- * - GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY overrides the native case
121
- * sensitivity for the file system and forces the output to be in
122
- * case-insensitive order
123
- * - GIT_STATUS_OPT_RENAMES_FROM_REWRITES indicates that rename detection
124
- * should include rewritten files
125
- * - GIT_STATUS_OPT_NO_REFRESH bypasses the default status behavior of
126
- * doing a "soft" index reload (i.e. reloading the index data if the
127
- * file on disk has been modified outside libgit2).
128
- * - GIT_STATUS_OPT_UPDATE_INDEX tells libgit2 to refresh the stat cache
129
- * in the index for files that are unchanged but have out of date stat
130
- * information in the index. It will result in less work being done on
131
- * subsequent calls to get status. This is mutually exclusive with the
132
- * NO_REFRESH option.
133
- *
134
96
  * Calling `git_status_foreach()` is like calling the extended version
135
97
  * with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED,
136
98
  * and GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS. Those options are bundled
137
99
  * together as `GIT_STATUS_OPT_DEFAULTS` if you want them as a baseline.
138
100
  */
139
101
  typedef enum {
102
+ /**
103
+ * Says that callbacks should be made on untracked files.
104
+ * These will only be made if the workdir files are included in the status
105
+ * "show" option.
106
+ */
140
107
  GIT_STATUS_OPT_INCLUDE_UNTRACKED = (1u << 0),
108
+
109
+ /**
110
+ * Says that ignored files get callbacks.
111
+ * Again, these callbacks will only be made if the workdir files are
112
+ * included in the status "show" option.
113
+ */
141
114
  GIT_STATUS_OPT_INCLUDE_IGNORED = (1u << 1),
115
+
116
+ /**
117
+ * Indicates that callback should be made even on unmodified files.
118
+ */
142
119
  GIT_STATUS_OPT_INCLUDE_UNMODIFIED = (1u << 2),
120
+
121
+ /**
122
+ * Indicates that submodules should be skipped.
123
+ * This only applies if there are no pending typechanges to the submodule
124
+ * (either from or to another type).
125
+ */
143
126
  GIT_STATUS_OPT_EXCLUDE_SUBMODULES = (1u << 3),
127
+
128
+ /**
129
+ * Indicates that all files in untracked directories should be included.
130
+ * Normally if an entire directory is new, then just the top-level
131
+ * directory is included (with a trailing slash on the entry name).
132
+ * This flag says to include all of the individual files in the directory
133
+ * instead.
134
+ */
144
135
  GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS = (1u << 4),
136
+
137
+ /**
138
+ * Indicates that the given path should be treated as a literal path,
139
+ * and not as a pathspec pattern.
140
+ */
145
141
  GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH = (1u << 5),
142
+
143
+ /**
144
+ * Indicates that the contents of ignored directories should be included
145
+ * in the status. This is like doing `git ls-files -o -i --exclude-standard`
146
+ * with core git.
147
+ */
146
148
  GIT_STATUS_OPT_RECURSE_IGNORED_DIRS = (1u << 6),
149
+
150
+ /**
151
+ * Indicates that rename detection should be processed between the head and
152
+ * the index and enables the GIT_STATUS_INDEX_RENAMED as a possible status
153
+ * flag.
154
+ */
147
155
  GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX = (1u << 7),
156
+
157
+ /**
158
+ * Indicates that rename detection should be run between the index and the
159
+ * working directory and enabled GIT_STATUS_WT_RENAMED as a possible status
160
+ * flag.
161
+ */
148
162
  GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR = (1u << 8),
163
+
164
+ /**
165
+ * Overrides the native case sensitivity for the file system and forces
166
+ * the output to be in case-sensitive order.
167
+ */
149
168
  GIT_STATUS_OPT_SORT_CASE_SENSITIVELY = (1u << 9),
169
+
170
+ /**
171
+ * Overrides the native case sensitivity for the file system and forces
172
+ * the output to be in case-insensitive order.
173
+ */
150
174
  GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY = (1u << 10),
175
+
176
+ /**
177
+ * Iindicates that rename detection should include rewritten files.
178
+ */
151
179
  GIT_STATUS_OPT_RENAMES_FROM_REWRITES = (1u << 11),
180
+
181
+ /**
182
+ * Bypasses the default status behavior of doing a "soft" index reload
183
+ * (i.e. reloading the index data if the file on disk has been modified
184
+ * outside libgit2).
185
+ */
152
186
  GIT_STATUS_OPT_NO_REFRESH = (1u << 12),
187
+
188
+ /**
189
+ * Tells libgit2 to refresh the stat cache in the index for files that are
190
+ * unchanged but have out of date stat einformation in the index.
191
+ * It will result in less work being done on subsequent calls to get status.
192
+ * This is mutually exclusive with the NO_REFRESH option.
193
+ */
153
194
  GIT_STATUS_OPT_UPDATE_INDEX = (1u << 13),
195
+
196
+ /**
197
+ * Normally files that cannot be opened or read are ignored as
198
+ * these are often transient files; this option will return
199
+ * unreadable files as `GIT_STATUS_WT_UNREADABLE`.
200
+ */
154
201
  GIT_STATUS_OPT_INCLUDE_UNREADABLE = (1u << 14),
202
+
203
+ /**
204
+ * Unreadable files will be detected and given the status
205
+ * untracked instead of unreadable.
206
+ */
155
207
  GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED = (1u << 15),
156
208
  } git_status_opt_t;
157
209
 
@@ -168,7 +220,10 @@ typedef enum {
168
220
  *
169
221
  */
170
222
  typedef struct {
171
- unsigned int version; /**< The version */
223
+ /**
224
+ * The struct version; pass `GIT_STATUS_OPTIONS_VERSION`.
225
+ */
226
+ unsigned int version;
172
227
 
173
228
  /**
174
229
  * The `show` value is one of the `git_status_show_t` constants that
@@ -177,21 +232,22 @@ typedef struct {
177
232
  git_status_show_t show;
178
233
 
179
234
  /**
180
- * The `flags` value is an OR'ed combination of the `git_status_opt_t`
181
- * values above.
235
+ * The `flags` value is an OR'ed combination of the
236
+ * `git_status_opt_t` values above.
182
237
  */
183
238
  unsigned int flags;
184
239
 
185
240
  /**
186
241
  * The `pathspec` is an array of path patterns to match (using
187
- * fnmatch-style matching), or just an array of paths to match exactly if
188
- * `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified in the flags.
242
+ * fnmatch-style matching), or just an array of paths to match
243
+ * exactly if `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified
244
+ * in the flags.
189
245
  */
190
246
  git_strarray pathspec;
191
247
 
192
248
  /**
193
- * The `baseline` is the tree to be used for comparison to the working directory
194
- * and index; defaults to HEAD.
249
+ * The `baseline` is the tree to be used for comparison to the
250
+ * working directory and index; defaults to HEAD.
195
251
  */
196
252
  git_tree *baseline;
197
253
  } git_status_options;
@@ -223,6 +223,15 @@ GIT_EXTERN(int) git_submodule_lookup(
223
223
  git_repository *repo,
224
224
  const char *name);
225
225
 
226
+ /**
227
+ * Create an in-memory copy of a submodule. The copy must be explicitly
228
+ * free'd or it will leak.
229
+ *
230
+ * @param out Pointer to store the copy of the submodule.
231
+ * @param source Original submodule to copy.
232
+ */
233
+ GIT_EXTERN(int) git_submodule_dup(git_submodule **out, git_submodule *source);
234
+
226
235
  /**
227
236
  * Release a submodule
228
237
  *
@@ -0,0 +1,174 @@
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
+ #ifndef INCLUDE_sys_git_commit_graph_h__
8
+ #define INCLUDE_sys_git_commit_graph_h__
9
+
10
+ #include "git2/common.h"
11
+ #include "git2/types.h"
12
+
13
+ /**
14
+ * @file git2/sys/commit_graph.h
15
+ * @brief Git commit-graph
16
+ * @defgroup git_commit_graph Git commit-graph APIs
17
+ * @ingroup Git
18
+ * @{
19
+ */
20
+ GIT_BEGIN_DECL
21
+
22
+ /**
23
+ * Opens a `git_commit_graph` from a path to an objects directory.
24
+ *
25
+ * This finds, opens, and validates the `commit-graph` file.
26
+ *
27
+ * @param cgraph_out the `git_commit_graph` struct to initialize.
28
+ * @param objects_dir the path to a git objects directory.
29
+ * @return Zero on success; -1 on failure.
30
+ */
31
+ GIT_EXTERN(int) git_commit_graph_open(git_commit_graph **cgraph_out, const char *objects_dir);
32
+
33
+ /**
34
+ * Frees commit-graph data. This should only be called when memory allocated
35
+ * using `git_commit_graph_open` is not returned to libgit2 because it was not
36
+ * associated with the ODB through a successful call to
37
+ * `git_odb_set_commit_graph`.
38
+ *
39
+ * @param cgraph the commit-graph object to free. If NULL, no action is taken.
40
+ */
41
+ GIT_EXTERN(void) git_commit_graph_free(git_commit_graph *cgraph);
42
+
43
+ /**
44
+ * Create a new writer for `commit-graph` files.
45
+ *
46
+ * @param out Location to store the writer pointer.
47
+ * @param objects_info_dir The `objects/info` directory.
48
+ * The `commit-graph` file will be written in this directory.
49
+ * @return 0 or an error code
50
+ */
51
+ GIT_EXTERN(int) git_commit_graph_writer_new(
52
+ git_commit_graph_writer **out,
53
+ const char *objects_info_dir);
54
+
55
+ /**
56
+ * Free the commit-graph writer and its resources.
57
+ *
58
+ * @param w The writer to free. If NULL no action is taken.
59
+ */
60
+ GIT_EXTERN(void) git_commit_graph_writer_free(git_commit_graph_writer *w);
61
+
62
+ /**
63
+ * Add an `.idx` file (associated to a packfile) to the writer.
64
+ *
65
+ * @param w The writer.
66
+ * @param repo The repository that owns the `.idx` file.
67
+ * @param idx_path The path of an `.idx` file.
68
+ * @return 0 or an error code
69
+ */
70
+ GIT_EXTERN(int) git_commit_graph_writer_add_index_file(
71
+ git_commit_graph_writer *w,
72
+ git_repository *repo,
73
+ const char *idx_path);
74
+
75
+ /**
76
+ * Add a revwalk to the writer. This will add all the commits from the revwalk
77
+ * to the commit-graph.
78
+ *
79
+ * @param w The writer.
80
+ * @param walk The git_revwalk.
81
+ * @return 0 or an error code
82
+ */
83
+ GIT_EXTERN(int) git_commit_graph_writer_add_revwalk(
84
+ git_commit_graph_writer *w,
85
+ git_revwalk *walk);
86
+
87
+
88
+ /**
89
+ * The strategy to use when adding a new set of commits to a pre-existing
90
+ * commit-graph chain.
91
+ */
92
+ typedef enum {
93
+ /**
94
+ * Do not split commit-graph files. The other split strategy-related option
95
+ * fields are ignored.
96
+ */
97
+ GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE = 0,
98
+ } git_commit_graph_split_strategy_t;
99
+
100
+ /**
101
+ * Options structure for
102
+ * `git_commit_graph_writer_commit`/`git_commit_graph_writer_dump`.
103
+ *
104
+ * Initialize with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`. Alternatively, you
105
+ * can use `git_commit_graph_writer_options_init`.
106
+ */
107
+ typedef struct {
108
+ unsigned int version;
109
+
110
+ /**
111
+ * The strategy to use when adding new commits to a pre-existing commit-graph
112
+ * chain.
113
+ */
114
+ git_commit_graph_split_strategy_t split_strategy;
115
+
116
+ /**
117
+ * The number of commits in level N is less than X times the number of
118
+ * commits in level N + 1. Default is 2.
119
+ */
120
+ float size_multiple;
121
+
122
+ /**
123
+ * The number of commits in level N + 1 is more than C commits.
124
+ * Default is 64000.
125
+ */
126
+ size_t max_commits;
127
+ } git_commit_graph_writer_options;
128
+
129
+ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION 1
130
+ #define GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT { \
131
+ GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION \
132
+ }
133
+
134
+ /**
135
+ * Initialize git_commit_graph_writer_options structure
136
+ *
137
+ * Initializes a `git_commit_graph_writer_options` with default values. Equivalent to
138
+ * creating an instance with `GIT_COMMIT_GRAPH_WRITER_OPTIONS_INIT`.
139
+ *
140
+ * @param opts The `git_commit_graph_writer_options` struct to initialize.
141
+ * @param version The struct version; pass `GIT_COMMIT_GRAPH_WRITER_OPTIONS_VERSION`.
142
+ * @return Zero on success; -1 on failure.
143
+ */
144
+ GIT_EXTERN(int) git_commit_graph_writer_options_init(
145
+ git_commit_graph_writer_options *opts,
146
+ unsigned int version);
147
+
148
+ /**
149
+ * Write a `commit-graph` file to a file.
150
+ *
151
+ * @param w The writer
152
+ * @param opts Pointer to git_commit_graph_writer_options struct.
153
+ * @return 0 or an error code
154
+ */
155
+ GIT_EXTERN(int) git_commit_graph_writer_commit(
156
+ git_commit_graph_writer *w,
157
+ git_commit_graph_writer_options *opts);
158
+
159
+ /**
160
+ * Dump the contents of the `commit-graph` to an in-memory buffer.
161
+ *
162
+ * @param buffer Buffer where to store the contents of the `commit-graph`.
163
+ * @param w The writer.
164
+ * @param opts Pointer to git_commit_graph_writer_options struct.
165
+ * @return 0 or an error code
166
+ */
167
+ GIT_EXTERN(int) git_commit_graph_writer_dump(
168
+ git_buf *buffer,
169
+ git_commit_graph_writer *w,
170
+ git_commit_graph_writer_options *opts);
171
+
172
+ /** @} */
173
+ GIT_END_DECL
174
+ #endif