##// END OF EJS Templates
added discovery by branches and tags for git
marcink -
r2449:08fc67c1 beta
parent child Browse files
Show More
@@ -192,7 +192,11 b' class GitRepository(BaseRepository):'
192 "for this repository %s" % (revision, self))
192 "for this repository %s" % (revision, self))
193
193
194 elif is_bstr(revision):
194 elif is_bstr(revision):
195 if not pattern.match(revision) or revision not in self.revisions:
195 _ref_revision = self._parsed_refs.get(revision)
196 if _ref_revision: # and _ref_revision[1] in ['H', 'RH', 'T']:
197 return _ref_revision[0]
198
199 elif not pattern.match(revision) or revision not in self.revisions:
196 raise ChangesetDoesNotExistError("Revision %r does not exist "
200 raise ChangesetDoesNotExistError("Revision %r does not exist "
197 "for this repository %s" % (revision, self))
201 "for this repository %s" % (revision, self))
198
202
@@ -267,18 +271,9 b' class GitRepository(BaseRepository):'
267 if ref.startswith('refs/heads/') and not ref.endswith('/HEAD')]
271 if ref.startswith('refs/heads/') and not ref.endswith('/HEAD')]
268 return OrderedDict(sorted(_branches, key=sortkey, reverse=False))
272 return OrderedDict(sorted(_branches, key=sortkey, reverse=False))
269
273
270 def _heads(self, reverse=False):
274 @LazyProperty
271 refs = self._repo.get_refs()
275 def tags(self):
272 heads = {}
276 return self._get_tags()
273
274 for key, val in refs.items():
275 for ref_key in ['refs/heads/', 'refs/remotes/origin/']:
276 if key.startswith(ref_key):
277 n = key[len(ref_key):]
278 if n not in ['HEAD']:
279 heads[n] = val
280
281 return heads if reverse else dict((y,x) for x,y in heads.iteritems())
282
277
283 def _get_tags(self):
278 def _get_tags(self):
284 if not self.revisions:
279 if not self.revisions:
@@ -288,10 +283,6 b' class GitRepository(BaseRepository):'
288 self._repo.get_refs().items() if ref.startswith('refs/tags/')]
283 self._repo.get_refs().items() if ref.startswith('refs/tags/')]
289 return OrderedDict(sorted(_tags, key=sortkey, reverse=True))
284 return OrderedDict(sorted(_tags, key=sortkey, reverse=True))
290
285
291 @LazyProperty
292 def tags(self):
293 return self._get_tags()
294
295 def tag(self, name, user, revision=None, message=None, date=None,
286 def tag(self, name, user, revision=None, message=None, date=None,
296 **kwargs):
287 **kwargs):
297 """
288 """
@@ -335,6 +326,34 b' class GitRepository(BaseRepository):'
335 except OSError, e:
326 except OSError, e:
336 raise RepositoryError(e.strerror)
327 raise RepositoryError(e.strerror)
337
328
329 @LazyProperty
330 def _parsed_refs(self):
331 refs = self._repo.get_refs()
332 keys = [('refs/heads/', 'H'),
333 ('refs/remotes/origin/', 'RH'),
334 ('refs/tags/', 'T')]
335 _refs = {}
336 for ref, sha in refs.iteritems():
337 for k, type_ in keys:
338 if ref.startswith(k):
339 _key = ref[len(k):]
340 _refs[_key] = [sha, type_]
341 break
342 return _refs
343
344 def _heads(self, reverse=False):
345 refs = self._repo.get_refs()
346 heads = {}
347
348 for key, val in refs.items():
349 for ref_key in ['refs/heads/', 'refs/remotes/origin/']:
350 if key.startswith(ref_key):
351 n = key[len(ref_key):]
352 if n not in ['HEAD']:
353 heads[n] = val
354
355 return heads if reverse else dict((y, x) for x, y in heads.iteritems())
356
338 def get_changeset(self, revision=None):
357 def get_changeset(self, revision=None):
339 """
358 """
340 Returns ``GitChangeset`` object representing commit from git repository
359 Returns ``GitChangeset`` object representing commit from git repository
General Comments 0
You need to be logged in to leave comments. Login now