Git-Raw
view release on metacpan or search on metacpan
STRLEN len;
const char *id_str;
Repository repo_ptr;
INIT:
len = 0;
id_str = git_ensure_pv_with_len(id, "id", &len);
CODE:
rc = git_oid_fromstrn(&oid, id_str, len);
git_check_error(rc);
repo_ptr = GIT_SV_TO_PTR(Repository, repo);
rc = git_tree_lookup_prefix(&tree, repo_ptr -> repository, &oid, len);
if (rc == GIT_ENOTFOUND) {
RETVAL = &PL_sv_undef;
} else {
git_check_error(rc);
GIT_NEW_OBJ_WITH_MAGIC(
RETVAL, SvPVbyte_nolen(class), tree, SvRV(repo)
);
}
OUTPUT: RETVAL
SV *
owner(self)
SV *self
PREINIT:
SV *repo;
CODE:
repo = GIT_SV_TO_MAGIC(self);
RETVAL = newRV_inc(repo);
OUTPUT: RETVAL
SV *
id(self)
Tree self
CODE:
RETVAL = git_oid_to_sv(git_tree_id(self));
OUTPUT: RETVAL
void
entries(self)
SV *self
PREINIT:
int ctx;
Tree self_ptr;
PPCODE:
ctx = GIMME_V;
if (ctx != G_VOID) {
int rc, count;
self_ptr = GIT_SV_TO_PTR(Tree, self);
count = git_tree_entrycount(self_ptr);
if (ctx == G_ARRAY) {
int i;
for (i = 0; i < count; i++) {
SV *tmp;
Tree_Entry entry;
Tree_Entry tmp_entry = (Tree_Entry)
git_tree_entry_byindex(self_ptr, i);
rc = git_tree_entry_dup(&entry, tmp_entry);
git_check_error(rc);
GIT_NEW_OBJ_WITH_MAGIC(
tmp, "Git::Raw::Tree::Entry",
entry, GIT_SV_TO_MAGIC(self)
);
mXPUSHs(tmp);
}
XSRETURN((int) count);
} else {
mXPUSHs(newSViv((int) count));
XSRETURN(1);
}
} else
XSRETURN_EMPTY;
SV *
entry_byname(self, name)
SV *self
SV *name
PREINIT:
int rc;
Tree_Entry tmp_entry, entry;
CODE:
tmp_entry = (Tree_Entry) git_tree_entry_byname(
GIT_SV_TO_PTR(Tree, self),
git_ensure_pv(name, "name")
);
if (!tmp_entry) {
RETVAL = &PL_sv_undef;
} else {
rc = git_tree_entry_dup(&entry, tmp_entry);
git_check_error(rc);
GIT_NEW_OBJ_WITH_MAGIC(
RETVAL, "Git::Raw::Tree::Entry",
( run in 0.807 second using v1.01-cache-2.11-cpan-5511b514fd6 )