@@ -98,6 +98,24 @@ def is_bare(self):
98
98
def close (self ):
99
99
self ._repository = None
100
100
101
+ def lookup (self , name ):
102
+ """Lookup the oid for a reference.
103
+
104
+ The name is looked for in "refs/heads/<name>", "refs/tags/<name>" and directly.
105
+ It does not matter weather the found reference is a symbolic or a direct, it will be
106
+ resolved to an oid.
107
+
108
+ Return:
109
+ Oid
110
+ """
111
+ for template in ['refs/heads/%s' , 'refs/tags/%s' , '%s' ]:
112
+ try :
113
+ reference = self ._repository .lookup_reference (template % name )
114
+ return reference .resolve ().target
115
+ except KeyError :
116
+ pass
117
+ raise RevisionNotFound (name )
118
+
101
119
def revision (self , id = 'HEAD' ):
102
120
try :
103
121
commit = self ._repository .revparse_single (id )
@@ -109,16 +127,8 @@ def revision(self, id='HEAD'):
109
127
def revisions (self , name = None , order = pygit2 .GIT_SORT_REVERSE ):
110
128
seen = set ()
111
129
112
- def lookup (name ):
113
- for template in ['refs/heads/%s' , 'refs/tags/%s' ]:
114
- try :
115
- return self ._repository .lookup_reference (template % name )
116
- except KeyError :
117
- pass
118
- raise RevisionNotFound (name )
119
-
120
130
def traverse (ref , seen ):
121
- for commit in self ._repository .walk (ref . target , order ):
131
+ for commit in self ._repository .walk (ref , order ):
122
132
oid = commit .oid
123
133
if oid not in seen :
124
134
seen .add (oid )
@@ -129,11 +139,11 @@ def iter_commits(name, seen):
129
139
130
140
if not name :
131
141
for name in self .branches :
132
- ref = self ._repository . lookup_reference (name )
142
+ ref = self .lookup (name )
133
143
commits += traverse (ref , seen )
134
144
else :
135
- ref = lookup (name )
136
- commits += traverse (ref , seen )
145
+ oid = self . lookup (name )
146
+ commits += traverse (oid , seen )
137
147
return commits
138
148
139
149
return iter_commits (name , seen )
0 commit comments