[RFC PATCH 4/6] contrib/cgit-rs: add repo initialization and config access
From: Calvin Wan <calvinwan@google.com>
Co-authored-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Calvin Wan <calvinwan@google.com>
Signed-off-by: Josh Steadmon <steadmon@google.com>
---
contrib/cgit-rs/public_symbol_export.c | 27 ++++++++++++++++++++++++++
contrib/cgit-rs/public_symbol_export.h | 8 ++++++++
contrib/cgit-rs/src/lib.rs | 13 ++++++++++++-
contrib/cgit-rs/src/main.rs | 23 +++++++++++++++++++++-
4 files changed, 69 insertions(+), 2 deletions(-)
diff --git a/contrib/cgit-rs/public_symbol_export.c b/contrib/cgit-rs/public_symbol_export.c
index 3d1cd6cc4f..ab3401ac40 100644
--- a/contrib/cgit-rs/public_symbol_export.c
+++ b/contrib/cgit-rs/public_symbol_export.c
@@ -2,11 +2,35 @@
// original symbols can be hidden. Renaming these with a "libgit_" prefix also
// avoid conflicts with other libraries such as libgit2.
+#include "git-compat-util.h"
#include "contrib/cgit-rs/public_symbol_export.h"
+#include "attr.h"
+#include "config.h"
+#include "setup.h"
#include "version.h"
#pragma GCC visibility push(default)
+const char *libgit_setup_git_directory(void)
+{
+ return setup_git_directory();
+}
+
+int libgit_config_get_int(const char *key, int *dest)
+{
+ return git_config_get_int(key, dest);
+}
+
+void libgit_initialize_the_repository(void)
+{
+ initialize_the_repository();
+}
+
+int libgit_parse_maybe_bool(const char *val)
+{
+ return git_parse_maybe_bool(val);
+}
+
const char *libgit_user_agent(void)
{
return git_user_agent();
@@ -17,4 +41,7 @@ const char *libgit_user_agent_sanitized(void)
return git_user_agent_sanitized();
}
+const char *libgit_attr__true = git_attr__true;
+const char *libgit_attr__false = git_attr__false;
+
#pragma GCC visibility pop
diff --git a/contrib/cgit-rs/public_symbol_export.h b/contrib/cgit-rs/public_symbol_export.h
index a3372f93fa..97e8e871ba 100644
--- a/contrib/cgit-rs/public_symbol_export.h
+++ b/contrib/cgit-rs/public_symbol_export.h
@@ -1,6 +1,14 @@
#ifndef PUBLIC_SYMBOL_EXPORT_H
#define PUBLIC_SYMBOL_EXPORT_H
+const char *libgit_setup_git_directory(void);
+
+int libgit_config_get_int(const char *key, int *dest);
+
+void libgit_initialize_the_repository(void);
+
+int libgit_parse_maybe_bool(const char *val);
+
const char *libgit_user_agent(void);
const char *libgit_user_agent_sanitized(void);
diff --git a/contrib/cgit-rs/src/lib.rs b/contrib/cgit-rs/src/lib.rs
index dc46e7ff42..df350e758f 100644
--- a/contrib/cgit-rs/src/lib.rs
+++ b/contrib/cgit-rs/src/lib.rs
@@ -1,6 +1,17 @@
-use libc::c_char;
+use libc::{c_char, c_int};
extern "C" {
+ pub fn libgit_setup_git_directory() -> *const c_char;
+
+ // From config.c
+ pub fn libgit_config_get_int(key: *const c_char, dest: *mut c_int) ->c_int;
+
+ // From repository.c
+ pub fn libgit_initialize_the_repository();
+
+ // From parse.c
+ pub fn libgit_parse_maybe_bool(val: *const c_char) -> c_int;
+
// From version.c
pub fn libgit_user_agent() -> *const c_char;
pub fn libgit_user_agent_sanitized() -> *const c_char;
diff --git a/contrib/cgit-rs/src/main.rs b/contrib/cgit-rs/src/main.rs
index 1794e3f43e..c5f8644fca 100644
--- a/contrib/cgit-rs/src/main.rs
+++ b/contrib/cgit-rs/src/main.rs
@@ -1,4 +1,4 @@
-use std::ffi::CStr;
+use std::ffi::{CStr, CString};
fn main() {
println!("Let's print some strings provided by Git");
@@ -7,4 +7,25 @@ fn main() {
println!("git_user_agent() = {:?}", c_str);
println!("git_user_agent_sanitized() = {:?}",
unsafe { CStr::from_ptr(cgit::libgit_user_agent_sanitized()) });
+
+ println!("\nNow try passing args");
+ let test_arg = CString::new("test_arg").unwrap();
+ println!("git_parse_maybe_bool(...) = {:?}",
+ unsafe { cgit::libgit_parse_maybe_bool(test_arg.as_ptr()) });
+
+ println!("\nCan we get an int out of our config??");
+ unsafe {
+ cgit::libgit_initialize_the_repository();
+ cgit::libgit_setup_git_directory();
+ let mut val: libc::c_int = 0;
+ let key = CString::new("trace2.eventNesting").unwrap();
+ cgit::libgit_config_get_int(
+ key.as_ptr(),
+ &mut val as *mut i32
+ );
+ println!(
+ "git_config_get_int(\"trace2.eventNesting\") -> {:?}",
+ val
+ );
+ };
}
--
2.46.0.rc2.264.g509ed76dc8-goog