Skip to content

Instantly share code, notes, and snippets.

@teropa
Last active January 16, 2016 15:59
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teropa/5974209 to your computer and use it in GitHub Desktop.
Save teropa/5974209 to your computer and use it in GitHub Desktop.
/*
* call-seq:
* Rugged::Repository.new(name, options = {}) -> repository
*
* Open a Git repository with the given +name+ and return a +Repository+ object
* representing it.
*
*/
static VALUE rb_git_repo_new(int argc, VALUE *argv, VALUE klass)
{
git_repository *repo;
git_odb *odb;
git_odb_backend *voldemort_odb_backend;
git_refdb *refdb;
git_refdb_backend *voldemort_refdb_backend;
git_reference *head;
int head_error;
int error = 0;
VALUE rb_path, rb_options;
rb_scan_args(argc, argv, "11", &rb_path, &rb_options);
Check_Type(rb_path, T_STRING);
error = git_odb_new(&odb);
rugged_exception_check(error);
error = git_repository_wrap_odb(&repo, odb);
rugged_exception_check(error);
error = git_odb_backend_voldemort(&voldemort_odb_backend, repo, StringValueCStr(rb_path), "tcp://localhost:6666", "git_odb");
rugged_exception_check(error);
error = git_odb_add_backend(odb, voldemort_odb_backend, 1);
rugged_exception_check(error);
error = git_refdb_new(&refdb, repo);
rugged_exception_check(error);
error = git_refdb_backend_voldemort(&voldemort_refdb_backend, refdb, StringValueCStr(rb_path), "tcp://localhost:6666", "git_refdb");
rugged_exception_check(error);
error = git_refdb_set_backend(refdb, voldemort_refdb_backend);
rugged_exception_check(error);
git_repository_set_refdb(repo, refdb);
set_repository_options(repo, rb_options);
head_error = git_reference_lookup(&head, repo, "HEAD");
if (head_error == GIT_ENOTFOUND) {
head_error = git_reference_symbolic_create(&head, repo, "HEAD", "refs/heads/master", 0);
if (!head_error) {
git_reference_free(head);
}
} else if (!head_error) {
git_reference_free(head);
}
return rugged_repo_new(klass, repo);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment