From: Josh Steadmon <steadmon@google.com>
To: git@vger.kernel.org
Cc: calvinwan@google.com, emrass@google.com, gitster@pobox.com,
mh@glandium.org, sandals@crustytoothpaste.net, ps@pks.im,
sunshine@sunshineco.com, phillip.wood123@gmail.com,
allred.sean@gmail.com, rsbecker@nexbridge.com
Subject: [PATCH v5 0/5] Introduce libgit-rs, a Rust wrapper around libgit.a
Date: Tue, 15 Oct 2024 15:50:52 -0700 [thread overview]
Message-ID: <cover.1729032373.git.steadmon@google.com> (raw)
In-Reply-To: <cover.1723054623.git.steadmon@google.com>
A quick note: normally I'd wait longer for more feedback before sending
out a new reroll, but due to some firefighting at $DAYJOB, I will not
have time to focus on this series for the next several weeks, possibly
up to a month. I wanted to get V5 out before then, but please understand
that I will not be able to address new feedback for a while.
This series provides two small Rust wrapper libraries around parts of
Git: "libgit-sys", which exposes a few functions from libgit.a, and
"libgit", which provides a more Rust-friendly interface to some of those
functions. In addition to included unit tests, at $DAYJOB we have tested
building JJ[1] with our library and used it to replace some of the
libgit2-rs uses.
[1] https://github.com/martinvonz/jj
Please find V1 cover letter here:
https://lore.kernel.org/git/cover.1723054623.git.steadmon@google.com/
Known NEEDSWORK:
* Investigate alternative methods of managing symbol visibility &
renaming.
* Figure out symbol versioning
Changes in V5:
* When building with INCLUDE_LIBGIT_RS defined, add
"-fvisibility=hidden" to CFLAGS. This allows us to manage symbol
visibility in libgitpub.a without causing `make all` to rebuild from
scratch due to changing CFLAGS.
* Avoid using c_int in the higher-level Rust API.
* Remove libgitpub.a and intermediate files with `make clean`.
Changes in V4:
* Drop V3 patch #3, which added wrappers around repository
initialization and config access. These are not well-libified, and
they are not necessary for JJ's proof-of-concept use case, so let's
avoid exporting them for now.
* Set a minimum supported Rust version of 1.63. Autodetect whether our
Rust version has c_int and c_char types; if not, define them
ourselves.
* When building libgitpub.a via build.rs, set DEVELOPER=1 to catch
additional errors at build time.
* In build.rs, use the make_cmd crate to portable select the correct
invocation of GNU Make.
* Follow naming standards for _alloc() and _free() functions.
* Use String instead of CString in higher-level API.
* Move libgit_configset_alloc() and libgit_configset_free() out of
upstream Git, to the libgitpub shim library.
* In libgitpub, initialize libgit_config_set structs in the _alloc()
function rather than with a separate _init() function.
* Remove unnecessary comments in libgit-sys showing where the wrapped
functions were originally defined.
* Fix clippy lint: don't reborrow configfile path references.
* Various typo fixes and `cargo fmt` fixes.
Changes in V3:
* Renamed cgit-rs to libgit-rs and cgit-sys to libgit-sys
* Makefile cleanup, particularly adding config.mak options that
developers can set to run Rust builds and tests by default (Patch 6)
* Provide testdata configs for unit tests
* ConfigSet API now uses &Path instead of &str -- more ergonomic for
Rust users to pass in and errors out if the path string isn't UTF-8
* Fixed unresolved dependency on libz in Cargo.toml
Calvin Wan (2):
libgit: add higher-level libgit crate
Makefile: add option to build and test libgit-rs and libgit-rs-sys
Josh Steadmon (3):
common-main: split init and exit code into new files
libgit-sys: introduce Rust wrapper for libgit.a
libgit-sys: also export some config_set functions
.gitignore | 2 +
Makefile | 44 +++++++++
common-exit.c | 26 +++++
common-init.c | 63 ++++++++++++
common-init.h | 6 ++
common-main.c | 83 +---------------
contrib/libgit-rs/Cargo.lock | 77 +++++++++++++++
contrib/libgit-rs/Cargo.toml | 15 +++
contrib/libgit-rs/build.rs | 4 +
contrib/libgit-rs/libgit-sys/Cargo.lock | 69 ++++++++++++++
contrib/libgit-rs/libgit-sys/Cargo.toml | 17 ++++
contrib/libgit-rs/libgit-sys/README.md | 15 +++
contrib/libgit-rs/libgit-sys/build.rs | 35 +++++++
.../libgit-sys/public_symbol_export.c | 50 ++++++++++
.../libgit-sys/public_symbol_export.h | 18 ++++
contrib/libgit-rs/libgit-sys/src/lib.rs | 79 +++++++++++++++
contrib/libgit-rs/src/lib.rs | 95 +++++++++++++++++++
contrib/libgit-rs/testdata/config1 | 2 +
contrib/libgit-rs/testdata/config2 | 2 +
contrib/libgit-rs/testdata/config3 | 2 +
t/Makefile | 16 ++++
21 files changed, 639 insertions(+), 81 deletions(-)
create mode 100644 common-exit.c
create mode 100644 common-init.c
create mode 100644 common-init.h
create mode 100644 contrib/libgit-rs/Cargo.lock
create mode 100644 contrib/libgit-rs/Cargo.toml
create mode 100644 contrib/libgit-rs/build.rs
create mode 100644 contrib/libgit-rs/libgit-sys/Cargo.lock
create mode 100644 contrib/libgit-rs/libgit-sys/Cargo.toml
create mode 100644 contrib/libgit-rs/libgit-sys/README.md
create mode 100644 contrib/libgit-rs/libgit-sys/build.rs
create mode 100644 contrib/libgit-rs/libgit-sys/public_symbol_export.c
create mode 100644 contrib/libgit-rs/libgit-sys/public_symbol_export.h
create mode 100644 contrib/libgit-rs/libgit-sys/src/lib.rs
create mode 100644 contrib/libgit-rs/src/lib.rs
create mode 100644 contrib/libgit-rs/testdata/config1
create mode 100644 contrib/libgit-rs/testdata/config2
create mode 100644 contrib/libgit-rs/testdata/config3
Range-diff against v4:
4: 2ed503216f ! 1: 1ae14207f6 Makefile: add option to build and test libgit-rs and libgit-rs-sys
@@
## Metadata ##
-Author: Calvin Wan <calvinwan@google.com>
+Author: Josh Steadmon <steadmon@google.com>
## Commit message ##
- Makefile: add option to build and test libgit-rs and libgit-rs-sys
+ common-main: split init and exit code into new files
- Add libgitrs, libgitrs-sys, libgitrs-test, and libgitrs-sys-test targets
- to their respective Makefiles so they can be built and tested without
- having to run cargo build/test.
+ Currently, object files in libgit.a reference common_exit(), which is
+ contained in common-main.o. However, common-main.o also includes main(),
+ which references cmd_main() in git.o, which in turn depends on all the
+ builtin/*.o objects.
- Add environment variable, INCLUDE_LIBGIT_RS, that when set,
- automatically builds and tests libgit-rs and libgit-rs-sys when `make
- all` is ran.
+ We would like to allow external users to link libgit.a without needing
+ to include so many extra objects. Enable this by splitting common_exit()
+ and check_bug_if_BUG() into a new file common-exit.c, and add
+ common-exit.o to LIB_OBJS so that these are included in libgit.a.
- Signed-off-by: Calvin Wan <calvinwan@google.com>
+ This split has previously been proposed ([1], [2]) to support fuzz tests
+ and unit tests by avoiding conflicting definitions for main(). However,
+ both of those issues were resolved by other methods of avoiding symbol
+ conflicts. Now we are trying to make libgit.a more self-contained, so
+ hopefully we can revisit this approach.
+
+ Additionally, move the initialization code out of main() into a new
+ init_git() function in its own file. Include this in libgit.a as well,
+ so that external users can share our setup code without calling our
+ main().
+
+ [1] https://lore.kernel.org/git/Yp+wjCPhqieTku3X@google.com/
+ [2] https://lore.kernel.org/git/20230517-unit-tests-v2-v2-1-21b5b60f4b32@google.com/
+
+ Signed-off-by: Josh Steadmon <steadmon@google.com>
## Makefile ##
-@@ Makefile: build-unit-tests: $(UNIT_TEST_PROGS)
- unit-tests: $(UNIT_TEST_PROGS) t/helper/test-tool$X
- $(MAKE) -C t/ unit-tests
+@@ Makefile: LIB_OBJS += combine-diff.o
+ LIB_OBJS += commit-graph.o
+ LIB_OBJS += commit-reach.o
+ LIB_OBJS += commit.o
++LIB_OBJS += common-exit.o
++LIB_OBJS += common-init.o
+ LIB_OBJS += compat/nonblock.o
+ LIB_OBJS += compat/obstack.o
+ LIB_OBJS += compat/terminal.o
+
+ ## common-exit.c (new) ##
+@@
++#include "git-compat-util.h"
++#include "trace2.h"
++
++static void check_bug_if_BUG(void)
++{
++ if (!bug_called_must_BUG)
++ return;
++ BUG("on exit(): had bug() call(s) in this process without explicit BUG_if_bug()");
++}
++
++/* We wrap exit() to call common_exit() in git-compat-util.h */
++int common_exit(const char *file, int line, int code)
++{
++ /*
++ * For non-POSIX systems: Take the lowest 8 bits of the "code"
++ * to e.g. turn -1 into 255. On a POSIX system this is
++ * redundant, see exit(3) and wait(2), but as it doesn't harm
++ * anything there we don't need to guard this with an "ifdef".
++ */
++ code &= 0xff;
++
++ check_bug_if_BUG();
++ trace2_cmd_exit_fl(file, line, code);
++
++ return code;
++}
+
+ ## common-init.c (new) ##
+@@
++#define USE_THE_REPOSITORY_VARIABLE
++
++#include "git-compat-util.h"
++#include "common-init.h"
++#include "exec-cmd.h"
++#include "gettext.h"
++#include "attr.h"
++#include "repository.h"
++#include "setup.h"
++#include "strbuf.h"
++#include "trace2.h"
++
++/*
++ * Many parts of Git have subprograms communicate via pipe, expect the
++ * upstream of a pipe to die with SIGPIPE when the downstream of a
++ * pipe does not need to read all that is written. Some third-party
++ * programs that ignore or block SIGPIPE for their own reason forget
++ * to restore SIGPIPE handling to the default before spawning Git and
++ * break this carefully orchestrated machinery.
++ *
++ * Restore the way SIGPIPE is handled to default, which is what we
++ * expect.
++ */
++static void restore_sigpipe_to_default(void)
++{
++ sigset_t unblock;
++
++ sigemptyset(&unblock);
++ sigaddset(&unblock, SIGPIPE);
++ sigprocmask(SIG_UNBLOCK, &unblock, NULL);
++ signal(SIGPIPE, SIG_DFL);
++}
++
++void init_git(const char **argv)
++{
++ struct strbuf tmp = STRBUF_INIT;
++
++ trace2_initialize_clock();
++
++ /*
++ * Always open file descriptors 0/1/2 to avoid clobbering files
++ * in die(). It also avoids messing up when the pipes are dup'ed
++ * onto stdin/stdout/stderr in the child processes we spawn.
++ */
++ sanitize_stdfds();
++ restore_sigpipe_to_default();
++
++ git_resolve_executable_dir(argv[0]);
++
++ setlocale(LC_CTYPE, "");
++ git_setup_gettext();
++
++ initialize_repository(the_repository);
++
++ attr_start();
++
++ trace2_initialize();
++ trace2_cmd_start(argv);
++ trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
++
++ if (!strbuf_getcwd(&tmp))
++ tmp_original_cwd = strbuf_detach(&tmp, NULL);
++}
+
+ ## common-init.h (new) ##
+@@
++#ifndef COMMON_INIT_H
++#define COMMON_INIT_H
++
++void init_git(const char **argv);
++
++#endif /* COMMON_INIT_H */
+
+ ## common-main.c ##
+@@
+-#define USE_THE_REPOSITORY_VARIABLE
+-
+ #include "git-compat-util.h"
+-#include "exec-cmd.h"
+-#include "gettext.h"
+-#include "attr.h"
+-#include "repository.h"
+-#include "setup.h"
+-#include "strbuf.h"
+-#include "trace2.h"
+-
+-/*
+- * Many parts of Git have subprograms communicate via pipe, expect the
+- * upstream of a pipe to die with SIGPIPE when the downstream of a
+- * pipe does not need to read all that is written. Some third-party
+- * programs that ignore or block SIGPIPE for their own reason forget
+- * to restore SIGPIPE handling to the default before spawning Git and
+- * break this carefully orchestrated machinery.
+- *
+- * Restore the way SIGPIPE is handled to default, which is what we
+- * expect.
+- */
+-static void restore_sigpipe_to_default(void)
+-{
+- sigset_t unblock;
+-
+- sigemptyset(&unblock);
+- sigaddset(&unblock, SIGPIPE);
+- sigprocmask(SIG_UNBLOCK, &unblock, NULL);
+- signal(SIGPIPE, SIG_DFL);
+-}
++#include "common-init.h"
-+.PHONY: libgitrs-sys
-+libgitrs-sys:
-+ $(QUIET)(\
-+ cd contrib/libgit-rs/libgit-sys && \
-+ cargo build \
-+ )
-+.PHONY: libgitrs
-+libgitrs:
-+ $(QUIET)(\
-+ cd contrib/libgit-rs && \
-+ cargo build \
-+ )
-+ifdef INCLUDE_LIBGIT_RS
-+all:: libgitrs
-+endif
-+
- contrib/libgit-rs/libgit-sys/partial_symbol_export.o: contrib/libgit-rs/libgit-sys/public_symbol_export.o libgit.a reftable/libreftable.a xdiff/lib.a
- $(LD) -r $^ -o $@
+ int main(int argc, const char **argv)
+ {
+ int result;
+- struct strbuf tmp = STRBUF_INIT;
+-
+- trace2_initialize_clock();
+-
+- /*
+- * Always open file descriptors 0/1/2 to avoid clobbering files
+- * in die(). It also avoids messing up when the pipes are dup'ed
+- * onto stdin/stdout/stderr in the child processes we spawn.
+- */
+- sanitize_stdfds();
+- restore_sigpipe_to_default();
+-
+- git_resolve_executable_dir(argv[0]);
+-
+- setlocale(LC_CTYPE, "");
+- git_setup_gettext();
+-
+- initialize_repository(the_repository);
+-
+- attr_start();
+-
+- trace2_initialize();
+- trace2_cmd_start(argv);
+- trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
+-
+- if (!strbuf_getcwd(&tmp))
+- tmp_original_cwd = strbuf_detach(&tmp, NULL);
-
- ## t/Makefile ##
-@@ t/Makefile: perf:
++ init_git(argv);
+ result = cmd_main(argc, argv);
- .PHONY: pre-clean $(T) aggregate-results clean valgrind perf \
- check-chainlint clean-chainlint test-chainlint $(UNIT_TESTS)
-+
-+.PHONY: libgitrs-sys-test
-+libgitrs-sys-test:
-+ $(QUIET)(\
-+ cd ../contrib/libgit-rs/libgit-sys && \
-+ cargo test \
-+ )
-+.PHONY: libgitrs-test
-+libgitrs-test:
-+ $(QUIET)(\
-+ cd ../contrib/libgit-rs && \
-+ cargo test \
-+ )
-+ifdef INCLUDE_LIBGIT_RS
-+all:: libgitrs-sys-test libgitrs-test
-+endif
+ /* Not exit(3), but a wrapper calling our common_exit() */
+ exit(result);
+ }
+-
+-static void check_bug_if_BUG(void)
+-{
+- if (!bug_called_must_BUG)
+- return;
+- BUG("on exit(): had bug() call(s) in this process without explicit BUG_if_bug()");
+-}
+-
+-/* We wrap exit() to call common_exit() in git-compat-util.h */
+-int common_exit(const char *file, int line, int code)
+-{
+- /*
+- * For non-POSIX systems: Take the lowest 8 bits of the "code"
+- * to e.g. turn -1 into 255. On a POSIX system this is
+- * redundant, see exit(3) and wait(2), but as it doesn't harm
+- * anything there we don't need to guard this with an "ifdef".
+- */
+- code &= 0xff;
+-
+- check_bug_if_BUG();
+- trace2_cmd_exit_fl(file, line, code);
+-
+- return code;
+-}
1: ed925d6a33 ! 2: 1ed010c378 libgit-sys: introduce Rust wrapper for libgit.a
@@ Makefile: clean: profile-clean coverage-clean cocciclean
$(MAKE) -C Documentation/ clean
$(RM) Documentation/GIT-EXCLUDED-PROGRAMS
+ $(RM) -r contrib/libgit-rs/libgit-sys/target
++ $(RM) -r contrib/libgit-rs/libgit-sys/partial_symbol_export.o
++ $(RM) -r contrib/libgit-rs/libgit-sys/hidden_symbol_export.o
++ $(RM) -r contrib/libgit-rs/libgit-sys/libgitpub.a
ifndef NO_PERL
$(RM) -r perl/build/
endif
2: 8eeab7b418 = 3: 00762b57d0 libgit-sys: also export some config_set functions
3: 29599e9c7b ! 4: 4e5360931b libgit: add higher-level libgit crate
@@ Metadata
## Commit message ##
libgit: add higher-level libgit crate
- Wrap `struct config_set` and a few of its associated functions in
- libgit-sys. Also introduce a higher-level "libgit" crate which provides
- a more Rust-friendly interface to config_set structs.
+ The C functions exported by libgit-sys do not provide an idiomatic Rust
+ interface. To make it easier to use these functions via Rust, add a
+ higher-level "libgit" crate, that wraps the lower-level configset API
+ with an interface that is more Rust-y.
+
+ This combination of $X and $X-sys crates is a common pattern for FFI in
+ Rust, as documented in "The Cargo Book" [1].
+
+ [1] https://doc.rust-lang.org/cargo/reference/build-scripts.html#-sys-packages
Co-authored-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Josh Steadmon <steadmon@google.com>
@@ Makefile: clean: profile-clean coverage-clean cocciclean
$(RM) Documentation/GIT-EXCLUDED-PROGRAMS
- $(RM) -r contrib/libgit-rs/libgit-sys/target
+ $(RM) -r contrib/libgit-rs/target contrib/libgit-rs/libgit-sys/target
- ifndef NO_PERL
- $(RM) -r perl/build/
- endif
+ $(RM) -r contrib/libgit-rs/libgit-sys/partial_symbol_export.o
+ $(RM) -r contrib/libgit-rs/libgit-sys/hidden_symbol_export.o
+ $(RM) -r contrib/libgit-rs/libgit-sys/libgitpub.a
## contrib/libgit-rs/Cargo.lock (new) ##
@@
@@ contrib/libgit-rs/src/lib.rs (new)
+ }
+ }
+
-+ pub fn get_int(&mut self, key: &str) -> Option<c_int> {
++ pub fn get_int(&mut self, key: &str) -> Option<i32> {
+ let key = CString::new(key).expect("Couldn't convert to CString");
+ let mut val: c_int = 0;
+ unsafe {
@@ contrib/libgit-rs/src/lib.rs (new)
+ }
+ }
+
-+ Some(val)
++ Some(val.into())
+ }
+
+ pub fn get_string(&mut self, key: &str) -> Option<String> {
-: ---------- > 5: 15ce989de8 Makefile: add option to build and test libgit-rs and libgit-rs-sys
base-commit: 557ae147e6cdc9db121269b058c757ac5092f9c9
--
2.47.0.rc1.288.g06298d1525-goog
next prev parent reply other threads:[~2024-10-15 22:51 UTC|newest]
Thread overview: 217+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-07 18:21 [RFC PATCH 0/6] [RFC] Introduce cgit-rs, a Rust wrapper around libgit.a Josh Steadmon
2024-08-07 18:21 ` [RFC PATCH 1/6] common-main: split common_exit() into a new file Josh Steadmon
2024-08-07 21:21 ` Junio C Hamano
2024-08-07 22:54 ` Josh Steadmon
2024-08-07 18:21 ` [RFC PATCH 2/6] repository: add initialize_repo wrapper without pointer Josh Steadmon
2024-08-07 22:52 ` Mike Hommey
2024-08-07 23:23 ` Josh Steadmon
2024-08-07 23:29 ` Mike Hommey
2024-08-08 17:50 ` Josh Steadmon
2024-08-07 18:21 ` [RFC PATCH 3/6] contrib/cgit-rs: introduce Rust wrapper for libgit.a Josh Steadmon
2024-08-07 21:21 ` brian m. carlson
2024-08-07 21:40 ` rsbecker
2024-08-07 23:07 ` Josh Steadmon
2024-08-07 23:51 ` rsbecker
2024-08-08 17:13 ` Josh Steadmon
2024-08-08 18:43 ` rsbecker
2024-08-08 19:57 ` Junio C Hamano
2024-08-08 20:14 ` rsbecker
2024-08-12 2:00 ` rsbecker
2024-08-07 23:05 ` Josh Steadmon
2024-08-07 23:55 ` brian m. carlson
2024-08-08 2:21 ` Junio C Hamano
2024-08-08 17:15 ` Josh Steadmon
2024-08-08 18:22 ` Josh Steadmon
2024-08-08 20:18 ` Kyle Lippincott
2024-08-08 20:43 ` Josh Steadmon
2024-08-07 22:47 ` Mike Hommey
2024-08-07 23:29 ` Josh Steadmon
2024-08-08 0:17 ` Mike Hommey
2024-08-08 17:23 ` Josh Steadmon
2024-08-07 18:21 ` [RFC PATCH 4/6] contrib/cgit-rs: add repo initialization and config access Josh Steadmon
2024-08-07 21:26 ` brian m. carlson
2024-08-07 23:14 ` Josh Steadmon
2024-08-08 0:04 ` brian m. carlson
2024-08-07 18:21 ` [RFC PATCH 5/6] config: add git_configset_alloc Josh Steadmon
2024-08-07 18:21 ` [RFC PATCH 6/6] contrib/cgit-rs: add a subset of configset wrappers Josh Steadmon
2024-08-07 21:40 ` brian m. carlson
2024-08-07 21:53 ` Junio C Hamano
2024-08-08 21:44 ` Josh Steadmon
2024-09-04 17:30 ` Calvin Wan
2024-09-04 17:49 ` brian m. carlson
2024-09-06 19:37 ` Calvin Wan
2024-09-07 14:53 ` brian m. carlson
2024-09-04 18:33 ` Junio C Hamano
2024-09-04 19:03 ` brian m. carlson
2024-09-04 21:08 ` Junio C Hamano
2024-09-04 21:29 ` Josh Steadmon
2024-08-07 22:03 ` [RFC PATCH 0/6] [RFC] Introduce cgit-rs, a Rust wrapper around libgit.a brian m. carlson
2024-08-07 23:19 ` Josh Steadmon
2024-08-08 1:33 ` brian m. carlson
2024-08-09 22:16 ` Josh Steadmon
2024-08-08 11:51 ` Jason A. Donenfeld
2024-08-08 13:59 ` Dragan Simic
2024-08-08 15:38 ` rsbecker
2024-08-08 15:47 ` Dragan Simic
2024-08-08 17:20 ` Junio C Hamano
2024-08-09 19:22 ` Junio C Hamano
2024-08-09 19:29 ` Junio C Hamano
2024-08-09 22:27 ` Josh Steadmon
2024-08-09 20:54 ` Junio C Hamano
2024-08-09 22:26 ` Junio C Hamano
2024-08-09 22:28 ` Josh Steadmon
2024-08-09 22:32 ` Junio C Hamano
2024-08-09 22:41 ` [PATCH v2 0/5] " Josh Steadmon
2024-08-09 22:41 ` [PATCH v2 1/5] common-main: split init and exit code into new files Josh Steadmon
2024-08-09 22:41 ` [PATCH v2 2/5] cgit-sys: introduce Rust wrapper for libgit.a Josh Steadmon
2024-08-09 22:41 ` [PATCH v2 3/5] cgit-sys: add repo initialization and config access Josh Steadmon
2024-08-09 22:41 ` [PATCH v2 4/5] config: add git_configset_alloc() and git_configset_clear_and_free() Josh Steadmon
2024-08-12 9:10 ` Phillip Wood
2024-08-12 21:39 ` Josh Steadmon
2024-08-12 21:55 ` Kyle Lippincott
2024-08-13 9:51 ` phillip.wood123
2024-08-13 15:16 ` Junio C Hamano
2024-08-13 9:48 ` phillip.wood123
2024-10-02 22:12 ` Josh Steadmon
2024-08-16 11:24 ` Patrick Steinhardt
2024-10-02 22:17 ` Josh Steadmon
2024-08-09 22:41 ` [PATCH v2 5/5] cgit: add higher-level cgit crate Josh Steadmon
2024-08-12 9:26 ` Phillip Wood
2024-08-21 18:46 ` Calvin Wan
2024-08-21 19:23 ` Kyle Lippincott
2024-08-22 13:24 ` Phillip Wood
2024-08-22 9:12 ` Phillip Wood
2024-10-02 22:31 ` Josh Steadmon
2024-08-09 23:36 ` [PATCH v2 0/5] Introduce cgit-rs, a Rust wrapper around libgit.a Junio C Hamano
2024-08-10 13:15 ` Jason A. Donenfeld
2024-08-11 17:26 ` Dragan Simic
2024-08-11 23:03 ` Eric Sunshine
2024-08-11 23:23 ` Dragan Simic
2024-08-11 23:33 ` Eric Sunshine
2024-08-11 23:37 ` Dragan Simic
2024-08-12 8:15 ` Junio C Hamano
2024-08-12 9:03 ` Eric Sunshine
2024-08-12 18:11 ` Junio C Hamano
2024-08-12 21:32 ` Josh Steadmon
2024-08-16 11:39 ` Patrick Steinhardt
2024-08-16 21:38 ` brian m. carlson
2024-08-17 0:15 ` Eric Sunshine
2024-08-18 1:37 ` Junio C Hamano
2024-08-12 22:14 ` brian m. carlson
2024-08-12 18:08 ` Dragan Simic
2024-08-12 21:24 ` Josh Steadmon
2024-08-12 21:37 ` Junio C Hamano
2024-08-12 22:02 ` Junio C Hamano
2024-09-06 22:18 ` [PATCH v3 0/6] Introduce libgit-rs, " Calvin Wan
2024-09-06 22:21 ` [PATCH v3 1/6] common-main: split init and exit code into new files Calvin Wan
2024-09-06 22:21 ` [PATCH v3 2/6] libgit-sys: introduce Rust wrapper for libgit.a Calvin Wan
2024-09-06 22:39 ` Eric Sunshine
2024-09-06 23:04 ` Mike Hommey
2024-09-08 21:32 ` Junio C Hamano
2024-09-18 21:14 ` Josh Steadmon
2024-09-10 19:04 ` Calvin Wan
2024-09-18 21:14 ` Josh Steadmon
2024-09-06 22:21 ` [PATCH v3 3/6] libgit-sys: add repo initialization and config access Calvin Wan
2024-09-06 22:53 ` Eric Sunshine
2024-09-18 21:33 ` Josh Steadmon
2024-09-06 23:45 ` Junio C Hamano
2024-09-18 21:33 ` Josh Steadmon
2024-09-10 6:42 ` Patrick Steinhardt
2024-10-07 21:21 ` Josh Steadmon
2024-10-08 20:59 ` Josh Steadmon
2024-09-06 22:21 ` [PATCH v3 4/6] config: add git_configset_alloc() and git_configset_clear_and_free() Calvin Wan
2024-09-06 23:24 ` Eric Sunshine
2024-09-10 6:41 ` Patrick Steinhardt
2024-09-10 8:50 ` Phillip Wood
2024-09-10 14:44 ` Junio C Hamano
2024-09-10 19:26 ` Calvin Wan
2024-10-02 22:45 ` Josh Steadmon
2024-09-06 22:21 ` [PATCH v3 5/6] libgit: add higher-level libgit crate Calvin Wan
2024-09-07 0:09 ` Junio C Hamano
2024-09-09 20:47 ` Junio C Hamano
2024-09-10 19:04 ` Calvin Wan
2024-09-10 19:14 ` Junio C Hamano
2024-09-17 22:29 ` Josh Steadmon
2024-09-18 16:34 ` Junio C Hamano
2024-10-07 23:31 ` Josh Steadmon
2024-09-17 21:37 ` Josh Steadmon
2024-09-06 22:21 ` [PATCH v3 6/6] Makefile: add option to build and test libgit-rs and libgit-rs-sys Calvin Wan
2024-09-07 15:15 ` Sean Allred
2024-09-08 21:33 ` Junio C Hamano
2024-09-10 19:12 ` Calvin Wan
2024-09-13 19:01 ` brian m. carlson
2024-10-07 21:23 ` Josh Steadmon
2024-10-02 22:49 ` Josh Steadmon
2024-10-08 23:19 ` [PATCH v4 0/5] Introduce libgit-rs, a Rust wrapper around libgit.a Josh Steadmon
2024-10-08 23:19 ` [PATCH v4 1/5] common-main: split init and exit code into new files Josh Steadmon
2024-10-08 23:19 ` [PATCH v4 2/5] libgit-sys: introduce Rust wrapper for libgit.a Josh Steadmon
2024-10-08 23:19 ` [PATCH v4 3/5] libgit-sys: also export some config_set functions Josh Steadmon
2024-10-08 23:19 ` [PATCH v4 4/5] libgit: add higher-level libgit crate Josh Steadmon
2024-10-09 6:18 ` Eric Sunshine
2024-10-09 21:21 ` Josh Steadmon
2024-10-09 22:25 ` Josh Steadmon
2024-10-08 23:19 ` [PATCH v4 5/5] Makefile: add option to build and test libgit-rs and libgit-rs-sys Josh Steadmon
2024-10-08 23:45 ` Junio C Hamano
2024-10-09 0:12 ` rsbecker
2024-10-14 20:19 ` Josh Steadmon
2024-10-09 0:01 ` Junio C Hamano
2024-10-09 21:53 ` Josh Steadmon
2024-10-10 0:52 ` Junio C Hamano
2024-10-14 20:13 ` Josh Steadmon
2024-10-09 0:10 ` Junio C Hamano
2024-10-09 22:24 ` Josh Steadmon
2024-10-15 22:50 ` Josh Steadmon [this message]
2024-10-15 22:50 ` [PATCH v5 1/5] common-main: split init and exit code into new files Josh Steadmon
2024-10-15 22:50 ` [PATCH v5 2/5] libgit-sys: introduce Rust wrapper for libgit.a Josh Steadmon
2024-10-15 22:50 ` [PATCH v5 3/5] libgit-sys: also export some config_set functions Josh Steadmon
2024-10-15 22:50 ` [PATCH v5 4/5] libgit: add higher-level libgit crate Josh Steadmon
2024-10-15 22:50 ` [PATCH v5 5/5] Makefile: add option to build and test libgit-rs and libgit-rs-sys Josh Steadmon
2024-12-03 5:36 ` [PATCH v5 0/5] Introduce libgit-rs, a Rust wrapper around libgit.a Junio C Hamano
2025-01-15 20:05 ` [PATCH v6 " Josh Steadmon
2025-01-15 20:05 ` [PATCH v6 1/5] common-main: split init and exit code into new files Josh Steadmon
2025-01-15 22:40 ` Junio C Hamano
2025-01-16 2:46 ` Junio C Hamano
2025-01-16 21:02 ` Junio C Hamano
2025-01-17 9:44 ` Patrick Steinhardt
2025-01-21 23:21 ` Josh Steadmon
2025-01-15 20:05 ` [PATCH v6 2/5] libgit-sys: introduce Rust wrapper for libgit.a Josh Steadmon
2025-01-15 23:13 ` Junio C Hamano
2025-01-22 0:03 ` Josh Steadmon
2025-01-27 23:18 ` Josh Steadmon
2025-01-15 20:05 ` [PATCH v6 3/5] libgit-sys: also export some config_set functions Josh Steadmon
2025-01-15 20:05 ` [PATCH v6 4/5] libgit: add higher-level libgit crate Josh Steadmon
2025-01-21 0:00 ` brian m. carlson
2025-01-22 0:01 ` Josh Steadmon
2025-01-15 20:05 ` [PATCH v6 5/5] Makefile: add option to build and test libgit-rs and libgit-rs-sys Josh Steadmon
2025-01-15 22:31 ` [PATCH v6 0/5] Introduce libgit-rs, a Rust wrapper around libgit.a Junio C Hamano
2025-01-21 0:05 ` brian m. carlson
2025-01-21 1:17 ` Junio C Hamano
2025-01-28 0:19 ` [PATCH v7 0/4] " Josh Steadmon
2025-01-28 0:19 ` [PATCH v7 1/4] common-main: split init and exit code into new files Josh Steadmon
2025-01-28 0:19 ` [PATCH v7 2/4] libgit-sys: introduce Rust wrapper for libgit.a Josh Steadmon
2025-01-28 15:08 ` Phillip Wood
2025-01-28 20:26 ` Josh Steadmon
2025-01-28 20:44 ` Junio C Hamano
2025-01-28 0:19 ` [PATCH v7 3/4] libgit-sys: also export some config_set functions Josh Steadmon
2025-01-28 15:08 ` Phillip Wood
2025-01-28 20:47 ` Josh Steadmon
2025-01-28 0:19 ` [PATCH v7 4/4] libgit: add higher-level libgit crate Josh Steadmon
2025-01-28 4:56 ` Junio C Hamano
2025-01-28 20:50 ` Josh Steadmon
2025-01-28 21:17 ` Junio C Hamano
2025-01-28 22:01 ` [PATCH v8 0/4] Introduce libgit-rs, a Rust wrapper around libgit.a Josh Steadmon
2025-01-28 22:01 ` [PATCH v8 1/4] common-main: split init and exit code into new files Josh Steadmon
2025-01-28 22:01 ` [PATCH v8 2/4] libgit-sys: introduce Rust wrapper for libgit.a Josh Steadmon
2025-01-28 22:43 ` Junio C Hamano
2025-01-29 21:40 ` Josh Steadmon
2025-01-28 22:01 ` [PATCH v8 3/4] libgit-sys: also export some config_set functions Josh Steadmon
2025-01-28 22:01 ` [PATCH v8 4/4] libgit: add higher-level libgit crate Josh Steadmon
2025-01-29 15:24 ` [PATCH v8 0/4] Introduce libgit-rs, a Rust wrapper around libgit.a Phillip Wood
2025-01-29 21:42 ` Josh Steadmon
2025-01-29 21:50 ` [PATCH v9 " Josh Steadmon
2025-01-29 21:50 ` [PATCH v9 1/4] common-main: split init and exit code into new files Josh Steadmon
2025-01-29 21:50 ` [PATCH v9 2/4] libgit-sys: introduce Rust wrapper for libgit.a Josh Steadmon
2025-01-29 21:50 ` [PATCH v9 3/4] libgit-sys: also export some config_set functions Josh Steadmon
2025-01-29 21:50 ` [PATCH v9 4/4] libgit: add higher-level libgit crate Josh Steadmon
2025-01-30 10:49 ` [PATCH v9 0/4] Introduce libgit-rs, a Rust wrapper around libgit.a phillip.wood123
2025-01-30 19:32 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1729032373.git.steadmon@google.com \
--to=steadmon@google.com \
--cc=allred.sean@gmail.com \
--cc=calvinwan@google.com \
--cc=emrass@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mh@glandium.org \
--cc=phillip.wood123@gmail.com \
--cc=ps@pks.im \
--cc=rsbecker@nexbridge.com \
--cc=sandals@crustytoothpaste.net \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).