git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Josh Steadmon <steadmon@google.com>
To: git@vger.kernel.org
Cc: calvinwan@google.com, spectral@google.com,
	emilyshaffer@google.com,  emrass@google.com,
	rsbecker@nexbridge.com, gitster@pobox.com, mh@glandium.org,
	 sandals@crustytoothpaste.net, Jason@zx2c4.com,
	dsimic@manjaro.org
Subject: [PATCH v2 1/5] common-main: split init and exit code into new files
Date: Fri,  9 Aug 2024 15:41:13 -0700	[thread overview]
Message-ID: <800b37d16b8324faed8b7f84d30f797fc5664bf7.1723242556.git.steadmon@google.com> (raw)
In-Reply-To: <cover.1723242556.git.steadmon@google.com>

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.

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.

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      |  2 ++
 common-exit.c | 26 ++++++++++++++++
 common-init.c | 63 ++++++++++++++++++++++++++++++++++++++
 common-init.h |  6 ++++
 common-main.c | 83 ++-------------------------------------------------
 5 files changed, 99 insertions(+), 81 deletions(-)
 create mode 100644 common-exit.c
 create mode 100644 common-init.c
 create mode 100644 common-init.h

diff --git a/Makefile b/Makefile
index 3eab701b10..7caeb3c872 100644
--- a/Makefile
+++ b/Makefile
@@ -979,6 +979,8 @@ 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
diff --git a/common-exit.c b/common-exit.c
new file mode 100644
index 0000000000..1aaa538be3
--- /dev/null
+++ b/common-exit.c
@@ -0,0 +1,26 @@
+#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;
+}
diff --git a/common-init.c b/common-init.c
new file mode 100644
index 0000000000..5cc73f058c
--- /dev/null
+++ b/common-init.c
@@ -0,0 +1,63 @@
+#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);
+}
diff --git a/common-init.h b/common-init.h
new file mode 100644
index 0000000000..3e6db20cae
--- /dev/null
+++ b/common-init.h
@@ -0,0 +1,6 @@
+#ifndef COMMON_INIT_H
+#define COMMON_INIT_H
+
+void init_git(const char **argv);
+
+#endif /* COMMON_INIT_H */
diff --git a/common-main.c b/common-main.c
index 8e68ac9e42..6b7ab077b0 100644
--- a/common-main.c
+++ b/common-main.c
@@ -1,92 +1,13 @@
-#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"
 
 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);
 
+	init_git(argv);
 	result = cmd_main(argc, argv);
 
 	/* 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;
-}
-- 
2.46.0.76.ge559c4bf1a-goog


  reply	other threads:[~2024-08-09 22:41 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   ` Josh Steadmon [this message]
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 ` [PATCH v5 0/5] Introduce libgit-rs, a Rust wrapper around libgit.a Josh Steadmon
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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=800b37d16b8324faed8b7f84d30f797fc5664bf7.1723242556.git.steadmon@google.com \
    --to=steadmon@google.com \
    --cc=Jason@zx2c4.com \
    --cc=calvinwan@google.com \
    --cc=dsimic@manjaro.org \
    --cc=emilyshaffer@google.com \
    --cc=emrass@google.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=mh@glandium.org \
    --cc=rsbecker@nexbridge.com \
    --cc=sandals@crustytoothpaste.net \
    --cc=spectral@google.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.
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 NNTP newsgroup(s).