The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
MODULE = Git::Raw			PACKAGE = Git::Raw::Index::Entry

SV *
id(self)
	Index_Entry self

	CODE:
		RETVAL = git_oid_to_sv(&self -> id);

	OUTPUT: RETVAL

SV *
path(self)
	Index_Entry self

	CODE:
		RETVAL = newSVpv(self -> path, 0);

	OUTPUT: RETVAL

SV *
size(self)
	Index_Entry self

	CODE:
		RETVAL = newSVuv((size_t) self -> file_size);

	OUTPUT: RETVAL

SV *
stage(self)
	Index_Entry self

	CODE:
		RETVAL = newSViv(git_index_entry_stage(self));

	OUTPUT: RETVAL

SV *
clone(self, path)
	SV *self
	const char *path

	PREINIT:
		Index_Entry old_entry;

	CODE:
		old_entry = GIT_SV_TO_PTR(Index::Entry, self);

		RETVAL = git_index_entry_to_sv(
			old_entry, path,
			GIT_SV_TO_MAGIC(self)
		);

	OUTPUT: RETVAL

SV *
blob(self)
	SV *self

	PREINIT:
		int rc;
		Index_Entry entry;

		SV *repo;
		Repository repo_ptr;

		Blob blob;

	CODE:
		entry = GIT_SV_TO_PTR(Index::Entry, self);

		repo = GIT_SV_TO_MAGIC(self);
		repo_ptr = INT2PTR(Repository, SvIV((SV *) repo));

		RETVAL = &PL_sv_undef;

		rc = git_blob_lookup(
			&blob, repo_ptr -> repository,
			&entry -> id
		);
		if (rc != GIT_ENOTFOUND) {
			git_check_error(rc);
			GIT_NEW_OBJ_WITH_MAGIC(
				RETVAL, "Git::Raw::Blob", blob, repo
			);
		}

	OUTPUT: RETVAL

void
DESTROY(self)
	SV* self

	PREINIT:
		Index_Entry entry;

	CODE:
		SvREFCNT_dec(GIT_SV_TO_MAGIC(self));

		entry = GIT_SV_TO_PTR(Index::Entry, self);
		git_index_entry_free(entry);