git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 0/5] Introduce cgit-rs, a Rust wrapper around libgit.a

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 12, 2024, 18:11 UTC
Message-ID
<xmqqed6t4nno.fsf@gitster.g>
In-Reply-To
<CAPig+cSVNqBPjV3_41f6Ag2X4+-q4HidEo0D=1UaMG-Kv7pa5Q@mail.gmail.com>
Eric Sunshine <sunshine@sunshineco.com> writes:
Show 10 quoted lines
> A tangent: Speaking of external/other projects, I don't think we've
> seen an explanation yet as to why this Rust wrapper is proposed as a
> `contrib/` item of Git itself, as opposed to being a separate project.
>
> I can only think of two possible reasons why they might want it in the
> Git project itself...
>
> (1) Easier access to the library portions of Git ("libgit") since that
> portion of the code is not otherwise published as a standalone
> library.

This is not a good reason at all, if we look at what (the real) cgit project does ;-), which is to bind us as their submodule.

> (2) Perhaps the intention is that this Rust wrapper work will allow
> Rust to be used within Git itself[3]? If that's the case, then
> `contrib/` seems the wrong resting place for this code.

The contrib/ hierarchy is a mixed bag, and we may want to clean it up by Git 3.0 happens.

 - We used to put things that one-way depend on Git that are (1)
   useless by themselves, if Git did not exist, and (2) Git can do
   fine without them in the contrib/ hierarchy.
   The primary reason for doing so was because the Git was young and
   relatively unknown, and our community was small.  Even for an
   add-on that may be at most "nice to have" from Git's point of
   view, it made some sense to give these add-ons wider exposure by
   simply being bundled with Git.  We stopped doing that after Git
   ecosystem have matured enough and encouraged them to move either
   up (i.e. prove that Git cannot really do fine without it because
   the add-on is so useful, and become the first class part of Git)
   or out (i.e. it may be a fine add-on, but there are other similar
   add-ons that aim to achieve the same, similar, or overlapping
   goal---unlike the nascent era of Git, it should be able to become
   an independent project to compete fairly with others on its merit
   alone).
 - We have some stuff like completion and prompt scripts that have
   proven that the end-user experience cannot be "fine without", but
   haven't moved out of "contrib/", mostly by inercia.
 - We also have things that are meant to help Git developers in the
   hierarchy (Cocci rules come to mind).  This one could fall into
   that category, but I am not sure.
Show 5 quoted lines
> On the other hand, as a standalone project, a big benefit is that the
> Rust wrapper could have its own release cadence distinct from Git,
> which would likely be very beneficial since it is such a young
> (indeed, nascent) library; it is likely that the maintainers will want
> to release early and often at this stage.

That's cgit approach. If something is useless if Git did not exist, but Git does not need it at all to function, that may be a sensible thing to do.

If we plan to eventually be able to rewrite the logic for say history traveral or specifying "set of commits" in such a way that is more involved than just "those that can be reached from these tip commits excluding the ones that can be reached from those bottom commits" (in other words, "A..B C..D" that is not "^A B ^C D"), and find it unpleasant to do in C and want to employ Rust, for example, we'd certainly need it somewhere in _our_ tree. Perhaps by the time it happens we might have an extension/dll mechanism in such a way that those who do not want (or cannot build) certain extensions can opt out and these "optional" things would by convention live somewhere other than the main source code live, but even then, contrib/ sounds like a wrong place and we'd do so perhaps in extra/ or something.

Show 7 quoted lines
> [1]: Other Rust projects carry vendored copies of projects upon which
> they rely. For instance, the "native_tls" crate has a vendored copy of
> OpenSSL[2].
>
> [2]: https://docs.rs/native-tls/latest/native_tls/#cargo-features
>
> [3]: https://lore.kernel.org/git/CABPp-BFWsWCGogqQ=haMsS4OhOdSwc3frcAxa6soQR5ORTceOA@mail.gmail.com/
Previous: Eric SunshineNext: Josh Steadmon
Message 94 of 217 in “[RFC] Introduce cgit-rs, a Rust wrapper around libgit.a”
  1. 0/6 [RFC] Introduce cgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Aug 7, 2024
  2. 1/6 common-main: split common_exit() into a new fileJosh Steadmon, Aug 7, 2024
  3. Junio C HamanoAug 7, 2024
  4. Josh SteadmonAug 7, 2024
  5. 2/6 repository: add initialize_repo wrapper without pointerJosh Steadmon, Aug 7, 2024
  6. Mike HommeyAug 7, 2024
  7. Josh SteadmonAug 7, 2024
  8. Mike HommeyAug 7, 2024
  9. Josh SteadmonAug 8, 2024
  10. 3/6 contrib/cgit-rs: introduce Rust wrapper for libgit.aJosh Steadmon, Aug 7, 2024
  11. brian m. carlsonAug 7, 2024
  12. rsbecker@nexbridge.comAug 7, 2024
  13. Josh SteadmonAug 7, 2024
  14. rsbecker@nexbridge.comAug 7, 2024
  15. Josh SteadmonAug 8, 2024
  16. rsbecker@nexbridge.comAug 8, 2024
  17. Junio C HamanoAug 8, 2024
  18. rsbecker@nexbridge.comAug 8, 2024
  19. rsbecker@nexbridge.comAug 12, 2024
  20. Josh SteadmonAug 7, 2024
  21. brian m. carlsonAug 7, 2024
  22. Junio C HamanoAug 8, 2024
  23. Josh SteadmonAug 8, 2024
  24. Josh SteadmonAug 8, 2024
  25. Kyle LippincottAug 8, 2024
  26. Josh SteadmonAug 8, 2024
  27. Mike HommeyAug 7, 2024
  28. Josh SteadmonAug 7, 2024
  29. Mike HommeyAug 8, 2024
  30. Josh SteadmonAug 8, 2024
  31. 4/6 contrib/cgit-rs: add repo initialization and config accessJosh Steadmon, Aug 7, 2024
  32. brian m. carlsonAug 7, 2024
  33. Josh SteadmonAug 7, 2024
  34. brian m. carlsonAug 8, 2024
  35. 5/6 config: add git_configset_allocJosh Steadmon, Aug 7, 2024
  36. 6/6 contrib/cgit-rs: add a subset of configset wrappersJosh Steadmon, Aug 7, 2024
  37. brian m. carlsonAug 7, 2024
  38. Junio C HamanoAug 7, 2024
  39. Josh SteadmonAug 8, 2024
  40. Calvin WanSep 4, 2024
  41. brian m. carlsonSep 4, 2024
  42. Calvin WanSep 6, 2024
  43. brian m. carlsonSep 7, 2024
  44. Junio C HamanoSep 4, 2024
  45. brian m. carlsonSep 4, 2024
  46. Junio C HamanoSep 4, 2024
  47. Josh SteadmonSep 4, 2024
  48. brian m. carlsonAug 7, 2024
  49. Josh SteadmonAug 7, 2024
  50. brian m. carlsonAug 8, 2024
  51. Josh SteadmonAug 9, 2024
  52. Jason A. DonenfeldAug 8, 2024
  53. Dragan SimicAug 8, 2024
  54. rsbecker@nexbridge.comAug 8, 2024
  55. Dragan SimicAug 8, 2024
  56. Junio C HamanoAug 8, 2024
  57. Junio C HamanoAug 9, 2024
  58. Junio C HamanoAug 9, 2024
  59. Josh SteadmonAug 9, 2024
  60. Junio C HamanoAug 9, 2024
  61. Junio C HamanoAug 9, 2024
  62. Josh SteadmonAug 9, 2024
  63. Junio C HamanoAug 9, 2024
  64. 0/5 Introduce cgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Aug 9, 2024
  65. 1/5 common-main: split init and exit code into new filesJosh Steadmon, Aug 9, 2024
  66. 2/5 cgit-sys: introduce Rust wrapper for libgit.aJosh Steadmon, Aug 9, 2024
  67. 3/5 cgit-sys: add repo initialization and config accessJosh Steadmon, Aug 9, 2024
  68. 4/5 config: add git_configset_alloc() and git_configset_clear_and_free()Josh Steadmon, Aug 9, 2024
  69. Phillip WoodAug 12, 2024
  70. Josh SteadmonAug 12, 2024
  71. Kyle LippincottAug 12, 2024
  72. phillip.wood123@gmail.comAug 13, 2024
  73. Junio C HamanoAug 13, 2024
  74. phillip.wood123@gmail.comAug 13, 2024
  75. Josh SteadmonOct 2, 2024
  76. Patrick SteinhardtAug 16, 2024
  77. Josh SteadmonOct 2, 2024
  78. 5/5 cgit: add higher-level cgit crateJosh Steadmon, Aug 9, 2024
  79. Phillip WoodAug 12, 2024
  80. Calvin WanAug 21, 2024
  81. Kyle LippincottAug 21, 2024
  82. Phillip WoodAug 22, 2024
  83. Phillip WoodAug 22, 2024
  84. Josh SteadmonOct 2, 2024
  85. Junio C HamanoAug 9, 2024
  86. Jason A. DonenfeldAug 10, 2024
  87. Dragan SimicAug 11, 2024
  88. Eric SunshineAug 11, 2024
  89. Dragan SimicAug 11, 2024
  90. Eric SunshineAug 11, 2024
  91. Dragan SimicAug 11, 2024
  92. Junio C HamanoAug 12, 2024
  93. Eric SunshineAug 12, 2024
  94. Junio C HamanoAug 12, 2024
  95. Josh SteadmonAug 12, 2024
  96. Patrick SteinhardtAug 16, 2024
  97. brian m. carlsonAug 16, 2024
  98. Eric SunshineAug 17, 2024
  99. Junio C HamanoAug 18, 2024
  100. brian m. carlsonAug 12, 2024
  101. Dragan SimicAug 12, 2024
  102. Josh SteadmonAug 12, 2024
  103. Junio C HamanoAug 12, 2024
  104. Junio C HamanoAug 12, 2024
  105. 0/6 Introduce libgit-rs, a Rust wrapper around libgit.aCalvin Wan, Sep 6, 2024
  106. 1/6 common-main: split init and exit code into new filesCalvin Wan, Sep 6, 2024
  107. 2/6 libgit-sys: introduce Rust wrapper for libgit.aCalvin Wan, Sep 6, 2024
  108. Eric SunshineSep 6, 2024
  109. Mike HommeySep 6, 2024
  110. Junio C HamanoSep 8, 2024
  111. Josh SteadmonSep 18, 2024
  112. Calvin WanSep 10, 2024
  113. Josh SteadmonSep 18, 2024
  114. 3/6 libgit-sys: add repo initialization and config accessCalvin Wan, Sep 6, 2024
  115. Eric SunshineSep 6, 2024
  116. Josh SteadmonSep 18, 2024
  117. Junio C HamanoSep 6, 2024
  118. Josh SteadmonSep 18, 2024
  119. Patrick SteinhardtSep 10, 2024
  120. Josh SteadmonOct 7, 2024
  121. Josh SteadmonOct 8, 2024
  122. 4/6 config: add git_configset_alloc() and git_configset_clear_and_free()Calvin Wan, Sep 6, 2024
  123. Eric SunshineSep 6, 2024
  124. Patrick SteinhardtSep 10, 2024
  125. Phillip WoodSep 10, 2024
  126. Junio C HamanoSep 10, 2024
  127. Calvin WanSep 10, 2024
  128. Josh SteadmonOct 2, 2024
  129. 5/6 libgit: add higher-level libgit crateCalvin Wan, Sep 6, 2024
  130. Junio C HamanoSep 7, 2024
  131. Junio C HamanoSep 9, 2024
  132. Calvin WanSep 10, 2024
  133. Junio C HamanoSep 10, 2024
  134. Josh SteadmonSep 17, 2024
  135. Junio C HamanoSep 18, 2024
  136. Josh SteadmonOct 7, 2024
  137. Josh SteadmonSep 17, 2024
  138. 6/6 Makefile: add option to build and test libgit-rs and libgit-rs-sysCalvin Wan, Sep 6, 2024
  139. Sean AllredSep 7, 2024
  140. Junio C HamanoSep 8, 2024
  141. Calvin WanSep 10, 2024
  142. brian m. carlsonSep 13, 2024
  143. Josh SteadmonOct 7, 2024
  144. Josh SteadmonOct 2, 2024
  145. 0/5 Introduce libgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Oct 8, 2024
  146. 1/5 common-main: split init and exit code into new filesJosh Steadmon, Oct 8, 2024
  147. 2/5 libgit-sys: introduce Rust wrapper for libgit.aJosh Steadmon, Oct 8, 2024
  148. 3/5 libgit-sys: also export some config_set functionsJosh Steadmon, Oct 8, 2024
  149. 4/5 libgit: add higher-level libgit crateJosh Steadmon, Oct 8, 2024
  150. Eric SunshineOct 9, 2024
  151. Josh SteadmonOct 9, 2024
  152. Josh SteadmonOct 9, 2024
  153. 5/5 Makefile: add option to build and test libgit-rs and libgit-rs-sysJosh Steadmon, Oct 8, 2024
  154. Junio C HamanoOct 8, 2024
  155. rsbecker@nexbridge.comOct 9, 2024
  156. Josh SteadmonOct 14, 2024
  157. Junio C HamanoOct 9, 2024
  158. Josh SteadmonOct 9, 2024
  159. Junio C HamanoOct 10, 2024
  160. Josh SteadmonOct 14, 2024
  161. Junio C HamanoOct 9, 2024
  162. Josh SteadmonOct 9, 2024
  163. 0/5 Introduce libgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Oct 15, 2024
  164. 1/5 common-main: split init and exit code into new filesJosh Steadmon, Oct 15, 2024
  165. 2/5 libgit-sys: introduce Rust wrapper for libgit.aJosh Steadmon, Oct 15, 2024
  166. 3/5 libgit-sys: also export some config_set functionsJosh Steadmon, Oct 15, 2024
  167. 4/5 libgit: add higher-level libgit crateJosh Steadmon, Oct 15, 2024
  168. 5/5 Makefile: add option to build and test libgit-rs and libgit-rs-sysJosh Steadmon, Oct 15, 2024
  169. Junio C HamanoDec 3, 2024
  170. 0/5 Introduce libgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Jan 15, 2025
  171. 1/5 common-main: split init and exit code into new filesJosh Steadmon, Jan 15, 2025
  172. Junio C HamanoJan 15, 2025
  173. Junio C HamanoJan 16, 2025
  174. Junio C HamanoJan 16, 2025
  175. Patrick SteinhardtJan 17, 2025
  176. Josh SteadmonJan 21, 2025
  177. 2/5 libgit-sys: introduce Rust wrapper for libgit.aJosh Steadmon, Jan 15, 2025
  178. Junio C HamanoJan 15, 2025
  179. Josh SteadmonJan 22, 2025
  180. Josh SteadmonJan 27, 2025
  181. 3/5 libgit-sys: also export some config_set functionsJosh Steadmon, Jan 15, 2025
  182. 4/5 libgit: add higher-level libgit crateJosh Steadmon, Jan 15, 2025
  183. brian m. carlsonJan 21, 2025
  184. Josh SteadmonJan 22, 2025
  185. 5/5 Makefile: add option to build and test libgit-rs and libgit-rs-sysJosh Steadmon, Jan 15, 2025
  186. Junio C HamanoJan 15, 2025
  187. brian m. carlsonJan 21, 2025
  188. Junio C HamanoJan 21, 2025
  189. 0/4 Introduce libgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Jan 28, 2025
  190. 1/4 common-main: split init and exit code into new filesJosh Steadmon, Jan 28, 2025
  191. 2/4 libgit-sys: introduce Rust wrapper for libgit.aJosh Steadmon, Jan 28, 2025
  192. Phillip WoodJan 28, 2025
  193. Josh SteadmonJan 28, 2025
  194. Junio C HamanoJan 28, 2025
  195. 3/4 libgit-sys: also export some config_set functionsJosh Steadmon, Jan 28, 2025
  196. Phillip WoodJan 28, 2025
  197. Josh SteadmonJan 28, 2025
  198. 4/4 libgit: add higher-level libgit crateJosh Steadmon, Jan 28, 2025
  199. Junio C HamanoJan 28, 2025
  200. Josh SteadmonJan 28, 2025
  201. Junio C HamanoJan 28, 2025
  202. 0/4 Introduce libgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Jan 28, 2025
  203. 1/4 common-main: split init and exit code into new filesJosh Steadmon, Jan 28, 2025
  204. 2/4 libgit-sys: introduce Rust wrapper for libgit.aJosh Steadmon, Jan 28, 2025
  205. Junio C HamanoJan 28, 2025
  206. Josh SteadmonJan 29, 2025
  207. 3/4 libgit-sys: also export some config_set functionsJosh Steadmon, Jan 28, 2025
  208. 4/4 libgit: add higher-level libgit crateJosh Steadmon, Jan 28, 2025
  209. Phillip WoodJan 29, 2025
  210. Josh SteadmonJan 29, 2025
  211. 0/4 Introduce libgit-rs, a Rust wrapper around libgit.aJosh Steadmon, Jan 29, 2025
  212. 1/4 common-main: split init and exit code into new filesJosh Steadmon, Jan 29, 2025
  213. 2/4 libgit-sys: introduce Rust wrapper for libgit.aJosh Steadmon, Jan 29, 2025
  214. 3/4 libgit-sys: also export some config_set functionsJosh Steadmon, Jan 29, 2025
  215. 4/4 libgit: add higher-level libgit crateJosh Steadmon, Jan 29, 2025
  216. phillip.wood123@gmail.comJan 30, 2025
  217. Junio C HamanoJan 30, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.