Git-Raw

 view release on metacpan or  search on metacpan

xs/Walker.xs  view on Meta::CPAN

	Walker self
	char* ref

	PREINIT:
		int rc;

	CODE:
		rc = git_revwalk_hide_ref(self, ref);
		git_check_error(rc);

void
hide_head(self)
	Walker self

	PREINIT:
		int rc;

	CODE:
		rc = git_revwalk_hide_head(self);
		git_check_error(rc);

SV *
next(self)
	SV *self

	PREINIT:
		int rc;

		SV *repo;

		Walker walk;

		git_oid oid;
		Commit commit = NULL;

	CODE:
		repo = GIT_SV_TO_MAGIC(self);
		walk = GIT_SV_TO_PTR(Walker, self);

		rc = git_revwalk_next(&oid, walk);
		if (rc == GIT_ITEROVER)
			XSRETURN_UNDEF;
		git_check_error(rc);

		rc = git_commit_lookup(&commit, git_revwalk_repository(walk), &oid);
		git_check_error(rc);

		GIT_NEW_OBJ_WITH_MAGIC(
			RETVAL, "Git::Raw::Commit", commit, repo
		);

	OUTPUT: RETVAL

void
all(self)
	SV *self

	PREINIT:
		int ctx;

	PPCODE:
		ctx = GIMME_V;

		if (ctx != G_VOID) {
			int rc;
			git_oid oid;
			size_t count = 0;
			SV *repo = GIT_SV_TO_MAGIC(self);
			Walker walk = GIT_SV_TO_PTR(Walker, self);

			while ((rc = git_revwalk_next(&oid, walk)) != GIT_ITEROVER) {
				git_check_error(rc);

				if (ctx == G_ARRAY) {
					Commit commit = NULL;
					SV *tmp;

					rc = git_commit_lookup(&commit, git_revwalk_repository(walk), &oid);
					git_check_error(rc);

					GIT_NEW_OBJ_WITH_MAGIC(
						tmp, "Git::Raw::Commit", commit, repo
					);

					mXPUSHs(tmp);
				}

				++count;
			}

			if (ctx == G_ARRAY) {
				XSRETURN((int) count);
			} else {
				mXPUSHs(newSViv((int) count));
				XSRETURN(1);
			}
		} else
			XSRETURN_EMPTY;

void
reset(self)
	Walker self

	CODE:
		git_revwalk_reset(self);

void
DESTROY(self)
	SV *self

	CODE:
		git_revwalk_free(GIT_SV_TO_PTR(Walker, self));
		SvREFCNT_dec(GIT_SV_TO_MAGIC(self));



( run in 0.607 second using v1.01-cache-2.11-cpan-5511b514fd6 )