Changeset 195 in tracdarcs for tracdarcs/components.py


Ignore:
Timestamp:
07/10/10 12:36:23 (23 months ago)
Author:
lele@…
Hash name:
20100710103623-7a6fb-e8c432b79b5bd5212ed5e8c22e1f24e4c4dc5ea9
Message:

Adapted the wiki link formatter to handle multiple repositories
Given that we are dealing with full darcs hashes, when the context doesn't
identify a particular repository, take the first one containing such changeset.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tracdarcs/components.py

    r185 r195  
    2020from trac.db import Column, DatabaseManager, Index, Table 
    2121from trac.env import IEnvironmentSetupParticipant 
    22 from trac.util.text import shorten_line 
     22from trac.util.text import shorten_line, to_unicode 
    2323from trac.versioncontrol import IRepositoryConnector, NoSuchChangeset 
    2424from trac.versioncontrol.web_ui import IPropertyRenderer, RenderedProperty 
     
    8686 
    8787    def _format_link(self, formatter, ns, rev, label): 
    88  
    89         repos = self.env.get_repository() 
    90         try: 
    91             chgset = repos.get_changeset(rev) 
    92             return tag.a(chgset.rev, class_="changeset", 
    93                          title=shorten_line(chgset.message), 
    94                          href=formatter.href.changeset(chgset.rev)) 
    95         except NoSuchChangeset, e: 
    96             return tag.a(label, class_="missing changeset", 
    97                          title="No changeset for %s" % rev, rel="nofollow") 
     88        reponame = None 
     89 
     90        # See if the context carries a repository... 
     91        context = formatter.context 
     92        while context: 
     93            if context.resource.realm in ('source', 'changeset'): 
     94                reponame = context.resource.parent.id 
     95                break 
     96            context = context.parent 
     97 
     98        # If it does not, take the first repository containing the 
     99        # specified revision, if any. We can do this assuming that 
     100        #   a) we are dealing with full darcs hashes and 
     101        #   b) darcs hashes are globally unique 
     102        if reponame is None: 
     103            db = self.env.get_db_cnx() 
     104            c = db.cursor() 
     105            c.execute('SELECT r.value ' 
     106                      'FROM darcs_changesets c JOIN repository r ON c.repo_id = r.id ' 
     107                      'WHERE c.hash = %s AND r.name = %s ' 
     108                      'ORDER BY r.id ' 
     109                      'LIMIT 1', (rev, 'name',)) 
     110            row = c.fetchone() 
     111            reponame = row and row[0] or '' 
     112 
     113        repos = self.env.get_repository(reponame) 
     114        if repos: 
     115            try: 
     116                chgset = repos.get_changeset(rev) 
     117                return tag.a(chgset.rev, class_="changeset", 
     118                             title=shorten_line(chgset.message), 
     119                             href=formatter.href.changeset(chgset.rev, reponame)) 
     120            except NoSuchChangeset, e: 
     121                errmsg = to_unicode(e) 
     122        else: 
     123            errmsg = 'Repository "%s" not found' % reponame 
     124 
     125        return tag.a(label, class_="missing changeset", title=errmsg, rel="nofollow") 
    98126 
    99127class DarcsSetup(Component): 
Note: See TracChangeset for help on using the changeset viewer.