Skip to content

Make lookup a class method. #110

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 22, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 22 additions & 12 deletions quit/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,24 @@ def is_bare(self):
def close(self):
self._repository = None

def lookup(self, name):
"""Lookup the oid for a reference.

The name is looked for in "refs/heads/<name>", "refs/tags/<name>" and directly.
It does not matter weather the found reference is a symbolic or a direct, it will be
resolved to an oid.

Return:
Oid
"""
for template in ['refs/heads/%s', 'refs/tags/%s', '%s']:
try:
reference = self._repository.lookup_reference(template % name)
return reference.resolve().target
except KeyError:
pass
raise RevisionNotFound(name)

def revision(self, id='HEAD'):
try:
commit = self._repository.revparse_single(id)
Expand All @@ -109,16 +127,8 @@ def revision(self, id='HEAD'):
def revisions(self, name=None, order=pygit2.GIT_SORT_REVERSE):
seen = set()

def lookup(name):
for template in ['refs/heads/%s', 'refs/tags/%s']:
try:
return self._repository.lookup_reference(template % name)
except KeyError:
pass
raise RevisionNotFound(name)

def traverse(ref, seen):
for commit in self._repository.walk(ref.target, order):
for commit in self._repository.walk(ref, order):
oid = commit.oid
if oid not in seen:
seen.add(oid)
Expand All @@ -129,11 +139,11 @@ def iter_commits(name, seen):

if not name:
for name in self.branches:
ref = self._repository.lookup_reference(name)
ref = self.lookup(name)
commits += traverse(ref, seen)
else:
ref = lookup(name)
commits += traverse(ref, seen)
oid = self.lookup(name)
commits += traverse(oid, seen)
return commits

return iter_commits(name, seen)
Expand Down