Lindenii Project Forge
Login

hare-libgit2

Hare bindings for libgit2 (BROKEN)
Commit info
ID
2e25d4b1c985b19b371abdbf5558d8e96b39b931
Author
Runxi Yu <me@runxiyu.org>
Author date
Tue, 11 Mar 2025 12:27:35 +0800
Committer
Runxi Yu <me@runxiyu.org>
Committer date
Tue, 11 Mar 2025 14:37:14 +0800
Actions
Add repository_init_flag_t
use types::c;


// Creates a new Git repository in the given folder.
//
// is_bare is a boolean that determines whether the repository will be a bare
// repository, or whether it should be created as a working directory with a
// .git inside.
// 
// Returns 0 on success, or an error code.
//
export fn repository_init(out: *nullable *repository, path: str, is_bare: bool) int = {
	let _path = c::fromstr(path);
	let res = _repository_init(out, _path, is_bare);
	free(_path);
	return res;
};
@symbol("git_repository_init") fn _repository_init(out: *nullable *repository, path: *const c::char, is_bare: bool) int;

// Option flags for [[repository_init_ext]].
//
// These flags configure extra behaviors to [[repository_init_ext]].
// In every case, the default behavior is the zero value (i.e. flag is
// not set). Just OR the flag values together for the flags parameter
// when initializing a new repo.
export type repository_init_flag_t = enum uint {
	// Create a bare repository with no working directory.
	REPOSITORY_INIT_BARE              = (1 << 0),

	// Return an GIT_EEXISTS error if the repo_path appears to already be
	// an git repository.
	REPOSITORY_INIT_NO_REINIT         = (1 << 1),

	// Make the repo_path (and workdir_path) as needed. Init is always willing
	// to create the ".git" directory even without this flag. This flag tells
	// init to create the trailing component of the repo and workdir paths
	// as needed.
	REPOSITORY_INIT_MKDIR             = (1 << 3),

	// Recursively make all components of the repo and workdir paths as
	// necessary.
	REPOSITORY_INIT_MKPATH            = (1 << 4),

	// libgit2 normally uses internal templates to initialize a new repo.
	// This flags enables external templates, looking the "template_path" from
	// the options if set, or the `init.templatedir` global config if not,
	// or falling back on "/usr/share/git-core/templates" if it exists.
	REPOSITORY_INIT_EXTERNAL_TEMPLATE = (1 << 5),

	// If an alternate workdir is specified, use relative paths for the gitdir
	// and core.worktree.
	REPOSITORY_INIT_RELATIVE_GITLINK  = (1 << 6),
};