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
@@ -130,9 +130,32 @@ GIT_EXTERN(git_attr_value_t) git_attr_value(const char *attr);
130
130
  *
131
131
  * Passing the `GIT_ATTR_CHECK_INCLUDE_HEAD` flag will use attributes
132
132
  * from a `.gitattributes` file in the repository at the HEAD revision.
133
+ *
134
+ * Passing the `GIT_ATTR_CHECK_INCLUDE_COMMIT` flag will use attributes
135
+ * from a `.gitattributes` file in a specific commit.
133
136
  */
134
137
  #define GIT_ATTR_CHECK_NO_SYSTEM (1 << 2)
135
138
  #define GIT_ATTR_CHECK_INCLUDE_HEAD (1 << 3)
139
+ #define GIT_ATTR_CHECK_INCLUDE_COMMIT (1 << 4)
140
+
141
+ /**
142
+ * An options structure for querying attributes.
143
+ */
144
+ typedef struct {
145
+ unsigned int version;
146
+
147
+ /** A combination of GIT_ATTR_CHECK flags */
148
+ unsigned int flags;
149
+
150
+ /**
151
+ * The commit to load attributes from, when
152
+ * `GIT_ATTR_CHECK_INCLUDE_COMMIT` is specified.
153
+ */
154
+ git_oid *commit_id;
155
+ } git_attr_options;
156
+
157
+ #define GIT_ATTR_OPTIONS_VERSION 1
158
+ #define GIT_ATTR_OPTIONS_INIT {GIT_ATTR_OPTIONS_VERSION}
136
159
 
137
160
  /**
138
161
  * Look up the value of one git attribute for path.
@@ -156,6 +179,28 @@ GIT_EXTERN(int) git_attr_get(
156
179
  const char *path,
157
180
  const char *name);
158
181
 
182
+ /**
183
+ * Look up the value of one git attribute for path with extended options.
184
+ *
185
+ * @param value_out Output of the value of the attribute. Use the GIT_ATTR_...
186
+ * macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just
187
+ * use the string value for attributes set to a value. You
188
+ * should NOT modify or free this value.
189
+ * @param repo The repository containing the path.
190
+ * @param opts The `git_attr_options` to use when querying these attributes.
191
+ * @param path The path to check for attributes. Relative paths are
192
+ * interpreted relative to the repo root. The file does
193
+ * not have to exist, but if it does not, then it will be
194
+ * treated as a plain file (not a directory).
195
+ * @param name The name of the attribute to look up.
196
+ */
197
+ GIT_EXTERN(int) git_attr_get_ext(
198
+ const char **value_out,
199
+ git_repository *repo,
200
+ git_attr_options *opts,
201
+ const char *path,
202
+ const char *name);
203
+
159
204
  /**
160
205
  * Look up a list of git attributes for path.
161
206
  *
@@ -193,6 +238,30 @@ GIT_EXTERN(int) git_attr_get_many(
193
238
  size_t num_attr,
194
239
  const char **names);
195
240
 
241
+ /**
242
+ * Look up a list of git attributes for path with extended options.
243
+ *
244
+ * @param values_out An array of num_attr entries that will have string
245
+ * pointers written into it for the values of the attributes.
246
+ * You should not modify or free the values that are written
247
+ * into this array (although of course, you should free the
248
+ * array itself if you allocated it).
249
+ * @param repo The repository containing the path.
250
+ * @param opts The `git_attr_options` to use when querying these attributes.
251
+ * @param path The path inside the repo to check attributes. This
252
+ * does not have to exist, but if it does not, then
253
+ * it will be treated as a plain file (i.e. not a directory).
254
+ * @param num_attr The number of attributes being looked up
255
+ * @param names An array of num_attr strings containing attribute names.
256
+ */
257
+ GIT_EXTERN(int) git_attr_get_many_ext(
258
+ const char **values_out,
259
+ git_repository *repo,
260
+ git_attr_options *opts,
261
+ const char *path,
262
+ size_t num_attr,
263
+ const char **names);
264
+
196
265
  /**
197
266
  * The callback used with git_attr_foreach.
198
267
  *
@@ -231,6 +300,26 @@ GIT_EXTERN(int) git_attr_foreach(
231
300
  git_attr_foreach_cb callback,
232
301
  void *payload);
233
302
 
303
+ /**
304
+ * Loop over all the git attributes for a path with extended options.
305
+ *
306
+ * @param repo The repository containing the path.
307
+ * @param opts The `git_attr_options` to use when querying these attributes.
308
+ * @param path Path inside the repo to check attributes. This does not have
309
+ * to exist, but if it does not, then it will be treated as a
310
+ * plain file (i.e. not a directory).
311
+ * @param callback Function to invoke on each attribute name and value.
312
+ * See git_attr_foreach_cb.
313
+ * @param payload Passed on as extra parameter to callback function.
314
+ * @return 0 on success, non-zero callback return value, or error code
315
+ */
316
+ GIT_EXTERN(int) git_attr_foreach_ext(
317
+ git_repository *repo,
318
+ git_attr_options *opts,
319
+ const char *path,
320
+ git_attr_foreach_cb callback,
321
+ void *payload);
322
+
234
323
  /**
235
324
  * Flush the gitattributes cache.
236
325
  *
@@ -26,27 +26,52 @@ GIT_BEGIN_DECL
26
26
  typedef enum {
27
27
  /** Normal blame, the default */
28
28
  GIT_BLAME_NORMAL = 0,
29
- /** Track lines that have moved within a file (like `git blame -M`).
30
- * NOT IMPLEMENTED. */
29
+
30
+ /**
31
+ * Track lines that have moved within a file (like `git blame -M`).
32
+ *
33
+ * This is not yet implemented and reserved for future use.
34
+ */
31
35
  GIT_BLAME_TRACK_COPIES_SAME_FILE = (1<<0),
32
- /** Track lines that have moved across files in the same commit (like `git blame -C`).
33
- * NOT IMPLEMENTED. */
36
+
37
+ /**
38
+ * Track lines that have moved across files in the same commit
39
+ * (like `git blame -C`).
40
+ *
41
+ * This is not yet implemented and reserved for future use.
42
+ */
34
43
  GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES = (1<<1),
35
- /** Track lines that have been copied from another file that exists in the
36
- * same commit (like `git blame -CC`). Implies SAME_FILE.
37
- * NOT IMPLEMENTED. */
44
+
45
+ /**
46
+ * Track lines that have been copied from another file that exists
47
+ * in the same commit (like `git blame -CC`). Implies SAME_FILE.
48
+ *
49
+ * This is not yet implemented and reserved for future use.
50
+ */
38
51
  GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES = (1<<2),
39
- /** Track lines that have been copied from another file that exists in *any*
40
- * commit (like `git blame -CCC`). Implies SAME_COMMIT_COPIES.
41
- * NOT IMPLEMENTED. */
52
+
53
+ /**
54
+ * Track lines that have been copied from another file that exists in
55
+ * *any* commit (like `git blame -CCC`). Implies SAME_COMMIT_COPIES.
56
+ *
57
+ * This is not yet implemented and reserved for future use.
58
+ */
42
59
  GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES = (1<<3),
43
- /** Restrict the search of commits to those reachable following only the
44
- * first parents. */
60
+
61
+ /**
62
+ * Restrict the search of commits to those reachable following only
63
+ * the first parents.
64
+ */
45
65
  GIT_BLAME_FIRST_PARENT = (1<<4),
46
- /** Use mailmap file to map author and committer names and email addresses
47
- * to canonical real names and email addresses. The mailmap will be read
48
- * from the working directory, or HEAD in a bare repository. */
66
+
67
+ /**
68
+ * Use mailmap file to map author and committer names and email
69
+ * addresses to canonical real names and email addresses. The
70
+ * mailmap will be read from the working directory, or HEAD in a
71
+ * bare repository.
72
+ */
49
73
  GIT_BLAME_USE_MAILMAP = (1<<5),
74
+
50
75
  /** Ignore whitespace differences */
51
76
  GIT_BLAME_IGNORE_WHITESPACE = (1<<6),
52
77
  } git_blame_flag_t;
@@ -63,25 +88,33 @@ typedef struct git_blame_options {
63
88
 
64
89
  /** A combination of `git_blame_flag_t` */
65
90
  uint32_t flags;
66
- /** The lower bound on the number of alphanumeric
67
- * characters that must be detected as moving/copying within a file for it to
68
- * associate those lines with the parent commit. The default value is 20.
69
- * This value only takes effect if any of the `GIT_BLAME_TRACK_COPIES_*`
70
- * flags are specified.
91
+
92
+ /**
93
+ * The lower bound on the number of alphanumeric characters that
94
+ * must be detected as moving/copying within a file for it to
95
+ * associate those lines with the parent commit. The default value
96
+ * is 20.
97
+ *
98
+ * This value only takes effect if any of the `GIT_BLAME_TRACK_COPIES_*`
99
+ * flags are specified.
71
100
  */
72
101
  uint16_t min_match_characters;
102
+
73
103
  /** The id of the newest commit to consider. The default is HEAD. */
74
104
  git_oid newest_commit;
105
+
75
106
  /**
76
107
  * The id of the oldest commit to consider.
77
108
  * The default is the first commit encountered with a NULL parent.
78
109
  */
79
110
  git_oid oldest_commit;
111
+
80
112
  /**
81
113
  * The first line in the file to blame.
82
114
  * The default is 1 (line numbers start with 1).
83
115
  */
84
116
  size_t min_line;
117
+
85
118
  /**
86
119
  * The last line in the file to blame.
87
120
  * The default is the last line of the file.
@@ -108,41 +141,59 @@ GIT_EXTERN(int) git_blame_options_init(
108
141
 
109
142
  /**
110
143
  * Structure that represents a blame hunk.
111
- *
112
- * - `lines_in_hunk` is the number of lines in this hunk
113
- * - `final_commit_id` is the OID of the commit where this line was last
114
- * changed.
115
- * - `final_start_line_number` is the 1-based line number where this hunk
116
- * begins, in the final version of the file
117
- * - `final_signature` is the author of `final_commit_id`. If
118
- * `GIT_BLAME_USE_MAILMAP` has been specified, it will contain the canonical
119
- * real name and email address.
120
- * - `orig_commit_id` is the OID of the commit where this hunk was found. This
121
- * will usually be the same as `final_commit_id`, except when
122
- * `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified.
123
- * - `orig_path` is the path to the file where this hunk originated, as of the
124
- * commit specified by `orig_commit_id`.
125
- * - `orig_start_line_number` is the 1-based line number where this hunk begins
126
- * in the file named by `orig_path` in the commit specified by
127
- * `orig_commit_id`.
128
- * - `orig_signature` is the author of `orig_commit_id`. If
129
- * `GIT_BLAME_USE_MAILMAP` has been specified, it will contain the canonical
130
- * real name and email address.
131
- * - `boundary` is 1 iff the hunk has been tracked to a boundary commit (the
132
- * root, or the commit specified in git_blame_options.oldest_commit)
133
144
  */
134
145
  typedef struct git_blame_hunk {
146
+ /**
147
+ * The number of lines in this hunk.
148
+ */
135
149
  size_t lines_in_hunk;
136
150
 
151
+ /**
152
+ * The OID of the commit where this line was last changed.
153
+ */
137
154
  git_oid final_commit_id;
155
+
156
+ /**
157
+ * The 1-based line number where this hunk begins, in the final version
158
+ * of the file.
159
+ */
138
160
  size_t final_start_line_number;
161
+
162
+ /**
163
+ * The author of `final_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been
164
+ * specified, it will contain the canonical real name and email address.
165
+ */
139
166
  git_signature *final_signature;
140
167
 
168
+ /**
169
+ * The OID of the commit where this hunk was found.
170
+ * This will usually be the same as `final_commit_id`, except when
171
+ * `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified.
172
+ */
141
173
  git_oid orig_commit_id;
174
+
175
+ /**
176
+ * The path to the file where this hunk originated, as of the commit
177
+ * specified by `orig_commit_id`.
178
+ */
142
179
  const char *orig_path;
180
+
181
+ /**
182
+ * The 1-based line number where this hunk begins in the file named by
183
+ * `orig_path` in the commit specified by `orig_commit_id`.
184
+ */
143
185
  size_t orig_start_line_number;
186
+
187
+ /**
188
+ * The author of `orig_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been
189
+ * specified, it will contain the canonical real name and email address.
190
+ */
144
191
  git_signature *orig_signature;
145
192
 
193
+ /**
194
+ * The 1 iff the hunk has been tracked to a boundary commit (the root,
195
+ * or the commit specified in git_blame_options.oldest_commit)
196
+ */
146
197
  char boundary;
147
198
  } git_blame_hunk;
148
199
 
@@ -84,7 +84,7 @@ GIT_EXTERN(git_repository *) git_blob_owner(const git_blob *blob);
84
84
  * time.
85
85
  *
86
86
  * @param blob pointer to the blob
87
- * @return the pointer
87
+ * @return the pointer, or NULL on error
88
88
  */
89
89
  GIT_EXTERN(const void *) git_blob_rawcontent(const git_blob *blob);
90
90
 
@@ -113,7 +113,13 @@ typedef enum {
113
113
  * When set, filters will be loaded from a `.gitattributes` file
114
114
  * in the HEAD commit.
115
115
  */
116
- GIT_BLOB_FILTER_ATTTRIBUTES_FROM_HEAD = (1 << 2),
116
+ GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD = (1 << 2),
117
+
118
+ /**
119
+ * When set, filters will be loaded from a `.gitattributes` file
120
+ * in the specified commit.
121
+ */
122
+ GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT = (1 << 3),
117
123
  } git_blob_filter_flag_t;
118
124
 
119
125
  /**
@@ -128,6 +134,12 @@ typedef struct {
128
134
 
129
135
  /** Flags to control the filtering process, see `git_blob_filter_flag_t` above */
130
136
  uint32_t flags;
137
+
138
+ /**
139
+ * The commit to load attributes from, when
140
+ * `GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT` is specified.
141
+ */
142
+ git_oid *commit_id;
131
143
  } git_blob_filter_options;
132
144
 
133
145
  #define GIT_BLOB_FILTER_OPTIONS_VERSION 1
@@ -304,6 +304,31 @@ GIT_EXTERN(int) git_branch_remote_name(
304
304
  */
305
305
  GIT_EXTERN(int) git_branch_upstream_remote(git_buf *buf, git_repository *repo, const char *refname);
306
306
 
307
+ /**
308
+ * Retrieve the upstream merge of a local branch
309
+ *
310
+ * This will return the currently configured "branch.*.merge" for a given
311
+ * branch. This branch must be local.
312
+ *
313
+ * @param buf the buffer into which to write the name
314
+ * @param repo the repository in which to look
315
+ * @param refname the full name of the branch
316
+ * @return 0 or an error code
317
+ */
318
+ GIT_EXTERN(int) git_branch_upstream_merge(git_buf *buf, git_repository *repo, const char *refname);
319
+
320
+ /**
321
+ * Determine whether a branch name is valid, meaning that (when prefixed
322
+ * with `refs/heads/`) that it is a valid reference name, and that any
323
+ * additional branch name restrictions are imposed (eg, it cannot start
324
+ * with a `-`).
325
+ *
326
+ * @param valid output pointer to set with validity of given branch name
327
+ * @param name a branch name to test
328
+ * @return 0 on success or an error code
329
+ */
330
+ GIT_EXTERN(int) git_branch_name_is_valid(int *valid, const char *name);
331
+
307
332
  /** @} */
308
333
  GIT_END_DECL
309
334
  #endif
@@ -8,6 +8,7 @@
8
8
  #define INCLUDE_git_cert_h__
9
9
 
10
10
  #include "common.h"
11
+ #include "types.h"
11
12
 
12
13
  /**
13
14
  * @file git2/cert.h
@@ -80,8 +81,27 @@ typedef enum {
80
81
  GIT_CERT_SSH_SHA1 = (1 << 1),
81
82
  /** SHA-256 is available */
82
83
  GIT_CERT_SSH_SHA256 = (1 << 2),
84
+ /** Raw hostkey is available */
85
+ GIT_CERT_SSH_RAW = (1 << 3),
83
86
  } git_cert_ssh_t;
84
87
 
88
+ typedef enum {
89
+ /** The raw key is of an unknown type. */
90
+ GIT_CERT_SSH_RAW_TYPE_UNKNOWN = 0,
91
+ /** The raw key is an RSA key. */
92
+ GIT_CERT_SSH_RAW_TYPE_RSA = 1,
93
+ /** The raw key is a DSS key. */
94
+ GIT_CERT_SSH_RAW_TYPE_DSS = 2,
95
+ /** The raw key is a ECDSA 256 key. */
96
+ GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_256 = 3,
97
+ /** The raw key is a ECDSA 384 key. */
98
+ GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_384 = 4,
99
+ /** The raw key is a ECDSA 521 key. */
100
+ GIT_CERT_SSH_RAW_TYPE_KEY_ECDSA_521 = 5,
101
+ /** The raw key is a ED25519 key. */
102
+ GIT_CERT_SSH_RAW_TYPE_KEY_ED25519 = 6
103
+ } git_cert_ssh_raw_type_t;
104
+
85
105
  /**
86
106
  * Hostkey information taken from libssh2
87
107
  */
@@ -89,28 +109,45 @@ typedef struct {
89
109
  git_cert parent; /**< The parent cert */
90
110
 
91
111
  /**
92
- * A hostkey type from libssh2, either
93
- * `GIT_CERT_SSH_MD5` or `GIT_CERT_SSH_SHA1`
112
+ * A bitmask containing the available fields.
94
113
  */
95
114
  git_cert_ssh_t type;
96
115
 
97
116
  /**
98
- * Hostkey hash. If type has `GIT_CERT_SSH_MD5` set, this will
117
+ * Hostkey hash. If `type` has `GIT_CERT_SSH_MD5` set, this will
99
118
  * have the MD5 hash of the hostkey.
100
119
  */
101
120
  unsigned char hash_md5[16];
102
121
 
103
122
  /**
104
- * Hostkey hash. If type has `GIT_CERT_SSH_SHA1` set, this will
123
+ * Hostkey hash. If `type` has `GIT_CERT_SSH_SHA1` set, this will
105
124
  * have the SHA-1 hash of the hostkey.
106
125
  */
107
126
  unsigned char hash_sha1[20];
108
127
 
109
128
  /**
110
- * Hostkey hash. If type has `GIT_CERT_SSH_SHA256` set, this will
129
+ * Hostkey hash. If `type` has `GIT_CERT_SSH_SHA256` set, this will
111
130
  * have the SHA-256 hash of the hostkey.
112
131
  */
113
132
  unsigned char hash_sha256[32];
133
+
134
+ /**
135
+ * Raw hostkey type. If `type` has `GIT_CERT_SSH_RAW` set, this will
136
+ * have the type of the raw hostkey.
137
+ */
138
+ git_cert_ssh_raw_type_t raw_type;
139
+
140
+ /**
141
+ * Pointer to the raw hostkey. If `type` has `GIT_CERT_SSH_RAW` set,
142
+ * this will have the raw contents of the hostkey.
143
+ */
144
+ const char *hostkey;
145
+
146
+ /**
147
+ * Raw hostkey length. If `type` has `GIT_CERT_SSH_RAW` set, this will
148
+ * have the length of the raw contents of the hostkey.
149
+ */
150
+ size_t hostkey_len;
114
151
  } git_cert_hostkey;
115
152
 
116
153
  /**