Mercurial > kallithea
comparison rhodecode/lib/helpers.py @ 2323:6c0f76330d91 beta
fix for issue #450. Rhodecode no longer will crash when bad revision is present in journal data.
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 22 May 2012 00:15:38 +0200 |
parents | d9972f76322e |
children | d3f1b71099ab 79b3c9c66c54 |
comparison
equal
deleted
inserted
replaced
2322:6ea36346590a | 2323:6c0f76330d91 |
---|---|
40 from rhodecode.lib.annotate import annotate_highlight | 40 from rhodecode.lib.annotate import annotate_highlight |
41 from rhodecode.lib.utils import repo_name_slug | 41 from rhodecode.lib.utils import repo_name_slug |
42 from rhodecode.lib.utils2 import str2bool, safe_unicode, safe_str, \ | 42 from rhodecode.lib.utils2 import str2bool, safe_unicode, safe_str, \ |
43 get_changeset_safe | 43 get_changeset_safe |
44 from rhodecode.lib.markup_renderer import MarkupRenderer | 44 from rhodecode.lib.markup_renderer import MarkupRenderer |
45 from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError | |
46 from rhodecode.lib.vcs.backends.base import BaseChangeset | |
45 | 47 |
46 log = logging.getLogger(__name__) | 48 log = logging.getLogger(__name__) |
47 | 49 |
48 | 50 |
49 def shorter(text, size=20): | 51 def shorter(text, size=20): |
445 | 447 |
446 repo_name = user_log.repository.repo_name | 448 repo_name = user_log.repository.repo_name |
447 | 449 |
448 repo = user_log.repository.scm_instance | 450 repo = user_log.repository.scm_instance |
449 | 451 |
450 message = lambda rev: rev.message | 452 def lnk(rev, repo_name): |
451 lnk = lambda rev, repo_name: ( | 453 |
452 link_to('r%s:%s' % (rev.revision, rev.short_id), | 454 if isinstance(rev, BaseChangeset): |
453 url('changeset_home', repo_name=repo_name, | 455 lbl = 'r%s:%s' % (rev.revision, rev.short_id) |
454 revision=rev.raw_id), | 456 _url = url('changeset_home', repo_name=repo_name, |
455 title=tooltip(message(rev)), class_='tooltip') | 457 revision=rev.raw_id) |
456 ) | 458 title = tooltip(rev.message) |
459 else: | |
460 lbl = '%s' % rev | |
461 _url = '#' | |
462 title = _('Changeset not found') | |
463 | |
464 return link_to(lbl, _url, title=title, class_='tooltip',) | |
457 | 465 |
458 revs = [] | 466 revs = [] |
459 if len(filter(lambda v: v != '', revs_ids)) > 0: | 467 if len(filter(lambda v: v != '', revs_ids)) > 0: |
460 # get only max revs_top_limit of changeset for performance/ui reasons | 468 for rev in revs_ids[:revs_top_limit]: |
461 revs = [ | 469 try: |
462 x for x in repo.get_changesets(revs_ids[0], | 470 rev = repo.get_changeset(rev) |
463 revs_ids[:revs_top_limit][-1]) | 471 revs.append(rev) |
464 ] | 472 except ChangesetDoesNotExistError: |
465 | 473 log.error('cannot find revision %s in this repo' % rev) |
474 revs.append(rev) | |
475 continue | |
466 cs_links = [] | 476 cs_links = [] |
467 cs_links.append(" " + ', '.join( | 477 cs_links.append(" " + ', '.join( |
468 [lnk(rev, repo_name) for rev in revs[:revs_limit]] | 478 [lnk(rev, repo_name) for rev in revs[:revs_limit]] |
469 ) | 479 ) |
470 ) | 480 ) |