@@ -111,7 +111,7 @@ async def scan_repository(self, new_cur_rev=None):
111
111
try :
112
112
if new_cur_rev is None :
113
113
new_cur_rev = self .repo_backend .get_head_rev ()
114
- wd , _ = self .repo_backend .request_rev (new_cur_rev )
114
+ wd , _ , _ = self .repo_backend .request_rev (new_cur_rev )
115
115
self .repo_backend .release_rev (self .cur_rev )
116
116
self .cur_rev = new_cur_rev
117
117
self .status ["cur_rev" ] = new_cur_rev
@@ -132,7 +132,7 @@ async def examine(self, filename, use_repository=True, revision=None):
132
132
if use_repository :
133
133
if revision is None :
134
134
revision = self .cur_rev
135
- wd , _ = self .repo_backend .request_rev (revision )
135
+ wd , _ , revision = self .repo_backend .request_rev (revision )
136
136
filename = os .path .join (wd , filename )
137
137
worker = Worker (self .worker_handlers )
138
138
try :
@@ -169,7 +169,7 @@ def get_head_rev(self):
169
169
return "N/A"
170
170
171
171
def request_rev (self , rev ):
172
- return self .root , None
172
+ return self .root , None , "N/A"
173
173
174
174
def release_rev (self , rev ):
175
175
pass
@@ -198,16 +198,25 @@ def __init__(self, root):
198
198
self .checkouts = dict ()
199
199
200
200
def get_head_rev (self ):
201
- return str (self .git .head .target )
201
+ return str (self .git .head .target )
202
+
203
+ def _get_pinned_rev (self , rev ):
204
+ """
205
+ Resolve a git reference (e.g. "HEAD", "master", "abcdef123456...") into
206
+ a git hash
207
+ """
208
+ commit , _ = self .git .resolve_refish (rev )
209
+ return commit .hex
202
210
203
211
def request_rev (self , rev ):
212
+ rev = self ._get_pinned_rev (rev )
204
213
if rev in self .checkouts :
205
214
co = self .checkouts [rev ]
206
215
co .ref_count += 1
207
216
else :
208
217
co = _GitCheckout (self .git , rev )
209
218
self .checkouts [rev ] = co
210
- return co .path , co .message
219
+ return co .path , co .message , rev
211
220
212
221
def release_rev (self , rev ):
213
222
co = self .checkouts [rev ]
0 commit comments