diff --git a/libgit2-sys/lib.rs b/libgit2-sys/lib.rs index 7e1ac1e998..a1b640c89a 100644 --- a/libgit2-sys/lib.rs +++ b/libgit2-sys/lib.rs @@ -55,12 +55,83 @@ pub enum git_branch_iterator {} pub enum git_blame {} pub enum git_commit {} pub enum git_config {} -pub enum git_config_iterator {} + +#[repr(C)] +pub struct git_config_backend_entry { + pub entry: git_config_entry, + pub free: Option, +} + +#[repr(C)] +pub struct git_config_iterator { + pub backend: *mut git_config_backend, + pub flags: c_uint, + pub next: Option< + extern "C" fn(*mut *mut git_config_backend_entry, *mut git_config_iterator) -> c_int, + >, + pub free: Option, +} + +#[repr(C)] +pub struct git_config_backend { + pub version: c_uint, + pub readonly: c_int, + pub cfg: *mut git_config, + pub open: Option< + extern "C" fn(*mut git_config_backend, git_config_level_t, *const git_repository) -> c_int, + >, + pub get: Option< + extern "C" fn( + *mut git_config_backend, + *const c_char, + *mut *mut git_config_backend_entry, + ) -> c_int, + >, + pub set: Option c_int>, + pub set_multivar: Option< + extern "C" fn( + *mut git_config_backend, + *const c_char, + *const c_char, + *const c_char, + ) -> c_int, + >, + pub del: Option c_int>, + pub del_multivar: + Option c_int>, + pub iterator: + Option c_int>, + pub snapshot: + Option c_int>, + pub lock: Option c_int>, + pub unlock: Option c_int>, + pub free: Option, +} + +pub const GIT_CONFIG_BACKEND_VERSION: c_uint = 1; + +#[repr(C)] +pub struct git_config_backend_memory_options { + pub version: c_uint, + pub backend_type: *const c_char, + pub origin_path: *const c_char, +} + +pub const GIT_CONFIG_BACKEND_MEMORY_OPTIONS_VERSION: c_uint = 1; + pub enum git_index {} pub enum git_index_conflict_iterator {} pub enum git_object {} pub enum git_reference {} -pub enum git_reference_iterator {} + +#[repr(C)] +pub struct git_reference_iterator { + pub db: *mut git_refdb, + pub next: Option c_int>, + pub next_name: Option c_int>, + pub free: Option, +} + pub enum git_annotated_commit {} pub enum git_refdb {} pub enum git_refspec {} @@ -87,7 +158,28 @@ pub enum git_reflog_entry {} pub enum git_describe_result {} pub enum git_packbuilder {} pub enum git_odb {} -pub enum git_odb_stream {} + +#[repr(C)] +pub struct git_odb_stream { + pub backend: *mut git_odb_backend, + pub mode: c_uint, + pub hash_ctx: *mut c_void, + pub declared_size: git_object_size_t, + pub received_bytes: git_object_size_t, + pub read: Option c_int>, + pub write: Option c_int>, + pub finalize_write: Option c_int>, + pub free: Option, +} + +git_enum! { + pub enum git_odb_stream_t { + GIT_STREAM_RDONLY = 2, + GIT_STREAM_WRONLY = 4, + GIT_STREAM_RW = 6, + } +} + pub enum git_odb_object {} pub enum git_worktree {} pub enum git_transaction {} @@ -2901,7 +2993,7 @@ extern "C" { pub fn git_commit_message_encoding(commit: *const git_commit) -> *const c_char; pub fn git_commit_message_raw(commit: *const git_commit) -> *const c_char; pub fn git_commit_nth_gen_ancestor( - commit: *mut *mut git_commit, + ancestor: *mut *mut git_commit, commit: *const git_commit, n: c_uint, ) -> c_int; @@ -3140,6 +3232,13 @@ extern "C" { ) -> c_int; // config + pub fn git_config_add_backend( + cfg: *mut git_config, + file: *mut git_config_backend, + level: git_config_level_t, + repo: *const git_repository, + force: c_int, + ) -> c_int; pub fn git_config_add_file_ondisk( cfg: *mut git_config, path: *const c_char, @@ -3147,6 +3246,18 @@ extern "C" { repo: *const git_repository, force: c_int, ) -> c_int; + pub fn git_config_backend_from_string( + out: *mut *mut git_config_backend, + cfg: *const c_char, + len: size_t, + opts: *mut git_config_backend_memory_options, + ) -> c_int; + pub fn git_config_backend_from_values( + out: *mut *mut git_config_backend, + values: *mut *const c_char, + len: size_t, + opts: *mut git_config_backend_memory_options, + ) -> c_int; pub fn git_config_delete_entry(cfg: *mut git_config, name: *const c_char) -> c_int; pub fn git_config_delete_multivar( cfg: *mut git_config, @@ -3193,6 +3304,7 @@ extern "C" { cfg: *const git_config, name: *const c_char, ) -> c_int; + pub fn git_config_init_backend(backend: *mut git_config_backend, version: c_uint) -> c_int; pub fn git_config_iterator_free(iter: *mut git_config_iterator); pub fn git_config_iterator_glob_new( out: *mut *mut git_config_iterator, diff --git a/systest/build.rs b/systest/build.rs index 9503af7e10..eb22065d4f 100644 --- a/systest/build.rs +++ b/systest/build.rs @@ -16,6 +16,7 @@ fn main() { .header("git2/sys/repository.h") .header("git2/sys/cred.h") .header("git2/sys/email.h") + .header("git2/sys/config.h") .header("git2/cred_helpers.h") .type_name(|s, _, _| s.to_string()); cfg.field_name(|_, f| match f {