static VALUE rb_git_remote_collection__each(VALUE self, int only_names) { git_repository *repo; git_strarray remotes; size_t i; int error = 0; int exception = 0; VALUE rb_repo; if (!rb_block_given_p()) { if (only_names) return rb_funcall(self, rb_intern("to_enum"), 1, CSTR2SYM("each_name")); else return rb_funcall(self, rb_intern("to_enum"), 1, CSTR2SYM("each")); } rb_repo = rugged_owner(self); rugged_check_repo(rb_repo); Data_Get_Struct(rb_repo, git_repository, repo); error = git_remote_list(&remotes, repo); rugged_exception_check(error); if (only_names) { for (i = 0; !exception && i < remotes.count; ++i) { rb_protect(rb_yield, rb_str_new_utf8(remotes.strings[i]), &exception); } } else { for (i = 0; !exception && !error && i < remotes.count; ++i) { git_remote *remote; if (!(error = git_remote_lookup(&remote, repo, remotes.strings[i]))) rb_protect(rb_yield, rugged_remote_new(rb_repo, remote), &exception); } } git_strarray_free(&remotes); if (exception) rb_jump_tag(exception); rugged_exception_check(error); return Qnil; }
/* * call-seq: * Remote.lookup(repository, name) -> remote or nil * * Return an existing remote with +name+ in +repository+: * - +name+: a valid remote name * * Returns a new Rugged::Remote object or +nil+ if the * remote doesn't exist * * Rugged::Remote.lookup(@repo, 'origin') #=> #<Rugged::Remote:0x00000001fbfa80> */ static VALUE rb_git_remote_lookup(VALUE klass, VALUE rb_repo, VALUE rb_name) { git_remote *remote; git_repository *repo; int error; Check_Type(rb_name, T_STRING); rugged_check_repo(rb_repo); Data_Get_Struct(rb_repo, git_repository, repo); error = git_remote_load(&remote, repo, StringValueCStr(rb_name)); if (error == GIT_ENOTFOUND) return Qnil; rugged_exception_check(error); return rugged_remote_new(klass, rb_repo, remote); }
/* * call-seq: * Remote.new(repository, url) -> remote * * Return a new remote with +url+ in +repository+ , the remote is not persisted: * - +url+: a valid remote url * * Returns a new Rugged::Remote object * * Rugged::Remote.new(@repo, 'git://github.com/libgit2/libgit2.git') #=> #<Rugged::Remote:0x00000001fbfa80> */ static VALUE rb_git_remote_new(VALUE klass, VALUE rb_repo, VALUE rb_url) { git_remote *remote; git_repository *repo; int error; rugged_check_repo(rb_repo); rugged_validate_remote_url(rb_url); Data_Get_Struct(rb_repo, git_repository, repo); error = git_remote_create_anonymous( &remote, repo, StringValueCStr(rb_url), NULL); rugged_exception_check(error); return rugged_remote_new(klass, rb_repo, remote); }
/* * call-seq: * remotes[name] -> remote or nil * * Lookup a remote in the collection with the given +name+. * * Returns a new Rugged::Remote object or +nil+ if the * remote doesn't exist. * * @repo.remotes["origin"] #=> #<Rugged::Remote:0x00000001fbfa80> */ static VALUE rb_git_remote_collection_aref(VALUE self, VALUE rb_name) { git_remote *remote; git_repository *repo; int error; VALUE rb_repo = rugged_owner(self); rugged_check_repo(rb_repo); Data_Get_Struct(rb_repo, git_repository, repo); Check_Type(rb_name, T_STRING); error = git_remote_lookup(&remote, repo, StringValueCStr(rb_name)); if (error == GIT_ENOTFOUND) return Qnil; rugged_exception_check(error); return rugged_remote_new(rb_repo, remote); }
/* * call-seq: * Remote.add(repository, name, url) -> remote * * Add a new remote with +name+ and +url+ to +repository+ * - +url+: a valid remote url * - +name+: a valid remote name * * Returns a new Rugged::Remote object * * Rugged::Remote.add(@repo, 'origin', 'git://github.com/libgit2/rugged.git') #=> #<Rugged::Remote:0x00000001fbfa80> */ static VALUE rb_git_remote_add(VALUE klass, VALUE rb_repo,VALUE rb_name, VALUE rb_url) { git_remote *remote; git_repository *repo; int error; Check_Type(rb_name, T_STRING); rugged_validate_remote_url(rb_url); rugged_check_repo(rb_repo); Data_Get_Struct(rb_repo, git_repository, repo); error = git_remote_create( &remote, repo, StringValueCStr(rb_name), StringValueCStr(rb_url)); rugged_exception_check(error); return rugged_remote_new(klass, rb_repo, remote); }
/* * call-seq: * remotes.create_anonymous(url) -> remote * * Return a new remote with +url+ in +repository+ , the remote is not persisted: * - +url+: a valid remote url * * Returns a new Rugged::Remote object. * * @repo.remotes.create_anonymous('git://github.com/libgit2/libgit2.git') #=> #<Rugged::Remote:0x00000001fbfa80> */ static VALUE rb_git_remote_collection_create_anonymous(VALUE self, VALUE rb_url) { git_remote *remote; git_repository *repo; int error; VALUE rb_repo = rugged_owner(self); rugged_check_repo(rb_repo); Data_Get_Struct(rb_repo, git_repository, repo); Check_Type(rb_url, T_STRING); error = git_remote_create_anonymous( &remote, repo, StringValueCStr(rb_url), NULL); rugged_exception_check(error); return rugged_remote_new(rb_repo, remote); }
/* :nodoc: */ static VALUE rb_git_remote_each(VALUE klass, VALUE rb_repo) { git_repository *repo; git_strarray remotes; size_t i; int error = 0; int exception = 0; if (!rb_block_given_p()) return rb_funcall(klass, rb_intern("to_enum"), 2, CSTR2SYM("each"), rb_repo); rugged_check_repo(rb_repo); Data_Get_Struct(rb_repo, git_repository, repo); error = git_remote_list(&remotes, repo); rugged_exception_check(error); for (i = 0; !exception && !error && i < remotes.count; ++i) { git_remote *remote; error = git_remote_load(&remote, repo, remotes.strings[i]); if (!error) { rb_protect( rb_yield, rugged_remote_new(klass, rb_repo, remote), &exception); } } git_strarray_free(&remotes); if (exception) rb_jump_tag(exception); rugged_exception_check(error); return Qnil; }