Ignore:
Location:
plugins/0.12/mercurial-plugin
Files:
3 added
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • plugins/0.12/mercurial-plugin/setup.py

    r9953 r9128  
    77try:
    88    import babel
    9 
    109    extra['message_extractors'] = {
    1110        'tracext': [
     
    1312        ],
    1413    }
    15 
    16     from trac.util.dist import get_l10n_cmdclass
    17     extra['cmdclass'] = get_l10n_cmdclass()
    18 
    1914except ImportError:
    2015    pass
     
    2318
    2419setup(name='TracMercurial',
    25       install_requires='Trac >=0.12dev-r9125',
     20      install_requires='Trac >=0.12multirepos',
    2621      description='Mercurial plugin for Trac multirepos branch',
    2722      keywords='trac scm plugin mercurial hg',
    28       version='0.12.0.23',
     23      version='0.12.0.21',
    2924      url=TracMercurial,
    3025      license='GPL',
  • plugins/0.12/mercurial-plugin/tracext/hg/backend.py

    r9953 r9128  
    2222from trac.core import *
    2323from trac.config import _TRUE_VALUES as TRUE
    24 from trac.env import ISystemInfoProvider
    2524from trac.util import arity
    2625from trac.util.datefmt import utc
    2726from trac.util.text import shorten_line, to_unicode
    2827from trac.versioncontrol.api import Changeset, Node, Repository, \
    29                                     IRepositoryConnector, RepositoryManager, \
     28                                    IRepositoryConnector, \
    3029                                    NoSuchChangeset, NoSuchNode
    3130from trac.versioncontrol.web_ui import IPropertyRenderer, RenderedProperty
     
    3433try:
    3534    from trac.util.translation import domain_functions
    36     gettext, _, tag_, N_, add_domain = \
    37              domain_functions('tracmercurial',
    38                               ('gettext', '_', 'tag_', 'N_', 'add_domain'))
     35    gettext, _, tag_, N_, add_domain = domain_functions('tracmercurial',
     36    'gettext', '_', 'tag_', 'N_', 'add_domain')
    3937except ImportError:
    4038    from trac.util.translation import _, tag_, N_, gettext
     
    105103    def _render_property(self, name, mode, context, props):
    106104        repos, revs = props[name]
    107        
    108         if name in ('Parents', 'Children'):
    109             label = repos.display_rev
    110         else:
    111             label = lambda rev: rev
    112        
    113105        def link(rev):
    114106            chgset = repos.get_changeset(rev)
    115             return tag.a(label(rev), class_="changeset",
     107            return tag.a(rev, class_="changeset",
    116108                         title=shorten_line(chgset.message),
    117109                         href=context.href.changeset(rev, repos.reponame))
    118        
    119110        if name == 'Parents' and len(revs) == 2: # merge
    120111            new = context.resource.id
     
    144135                   link(revs[-1]))
    145136
    146 
    147137class HgExtPropertyRenderer(Component):
    148138    implements(IPropertyRenderer)
    149139
    150140    def match_property(self, name, mode):
    151        return name in ('transplant_source', 'convert_revision') and \
     141       return name in ('transplant_source') and \
    152142                mode == 'revprop' and 4 or 0
    153143   
     
    157147            try:
    158148                chgset = MercurialChangeset(repos, value)
    159                 link = tag.a(repos.display_rev(chgset.rev), class_="changeset",
     149                link = tag.a(chgset.rev, class_="changeset",
    160150                             title=shorten_line(chgset.message),
    161                              href=context.href.changeset(hex(value),
     151                             href=context.href.changeset(short(value),
    162152                                                         repos.reponame))
    163153            except LookupError:
     
    166156            return RenderedProperty(name=_("Transplant:"), content=link,
    167157                                    name_attributes=[("class", "property")])
    168        
    169         elif name == 'convert_revision':
    170             text = value
    171             if value.startswith('svn:'):
    172                 # svn:af82e41b-90c4-0310-8c96-b1721e28e2e2/trunk@9517
    173                 uuid = value[:40]
    174                 rev = value.rsplit('@', 1)[-1]
    175                 for r in RepositoryManager(self.env).get_real_repositories():
    176                     if r.name.startswith(uuid + ':'):
    177                         path = r.reponame
    178                         href = context.href.changeset(rev, path or None)
    179                         text = tag.a('[%s%s]' % (rev, path and '/' + path),
    180                                      class_='changeset', href=href,
    181                                      title=_('Changeset in source repository'))
    182                         break
    183             return RenderedProperty(name=_('Convert:'), content=text,
    184                                     name_attributes=[("class", "property")])
    185 
    186158
    187159class HgDefaultPropertyRenderer(Component):
     
    204176class MercurialConnector(Component):
    205177
    206     implements(ISystemInfoProvider, IRepositoryConnector, IWikiSyntaxProvider)
     178    implements(IRepositoryConnector, IWikiSyntaxProvider)
    207179
    208180    def __init__(self):
     181        self._version = self._version_info = None
    209182        self.ui = None
    210183        locale_dir = pkg_resources.resource_filename(__name__, 'locale')
    211184        add_domain(self.env.path, locale_dir)
    212         self._version = self._version_info = None
    213         if not hg_import_error:
     185
     186    def _setup_ui(self, hgrc_path):
     187        self.ui = trac_ui(self.log)
     188        # (code below adapted from mercurial.dispatch._dispatch)
     189
     190        # read the local repository .hgrc into a local ui object
     191        if hgrc_path:
     192            if not os.path.isabs(hgrc_path):
     193                hgrc_path = os.path.join(self.env.path, 'conf', hgrc_path)
     194            if not os.path.exists(hgrc_path):
     195                self.log.warn("[hg] hgrc file (%s) doesn't exist.", hgrc_path)
     196            try:
     197                self.ui = trac_ui(self.log, parentui=self.ui)
     198                self.ui.check_trusted = False
     199                self.ui.readconfig(hgrc_path)
     200            except IOError, e:
     201                self.log.warn("[hg] hgrc file (%s) can't be read: %s",
     202                              hgrc_path, e)
     203
     204        extensions.loadall(self.ui)
     205        if hasattr(extensions, 'extensions'):
     206            for name, module in extensions.extensions():
     207                # setup extensions
     208                extsetup = getattr(module, 'extsetup', None)
     209                if extsetup:
     210                    if arity(extsetup) == 1:
     211                        extsetup(self.ui)
     212                    else:
     213                        extsetup()
     214
     215    def get_supported_types(self):
     216        """Support for `repository_type = hg`"""
     217        global hg_import_error
     218        if hg_import_error:
     219            self.error = hg_import_error
     220            yield ("hg", -1)
     221        else:
     222            yield ("hg", 8)
     223
     224    def get_repository(self, type, dir, params):
     225        """Return a `MercurialRepository`"""
     226        if not self._version:
    214227            try:
    215228                from mercurial.version import get_version
     
    224237            if m:
    225238                self._version_info = tuple([int(n or 0) for n in m.groups()])
    226 
    227     def _setup_ui(self, hgrc_path):
    228         self.ui = trac_ui(log=self.log)
    229         # (code below adapted from mercurial.dispatch._dispatch)
    230 
    231         # read the local repository .hgrc into a local ui object
    232         if hgrc_path:
    233             if not os.path.isabs(hgrc_path):
    234                 hgrc_path = os.path.join(self.env.path, 'conf', hgrc_path)
    235             if not os.path.exists(hgrc_path):
    236                 self.log.warn("[hg] hgrc file (%s) doesn't exist.", hgrc_path)
    237             try:
    238                 self.ui = trac_ui(self.ui, log=self.log)
    239                 self.ui.check_trusted = False
    240                 self.ui.readconfig(hgrc_path)
    241             except IOError, e:
    242                 self.log.warn("[hg] hgrc file (%s) can't be read: %s",
    243                               hgrc_path, e)
    244 
    245         extensions.loadall(self.ui)
    246         if hasattr(extensions, 'extensions'):
    247             for name, module in extensions.extensions():
    248                 # setup extensions
    249                 extsetup = getattr(module, 'extsetup', None)
    250                 if extsetup:
    251                     if arity(extsetup) == 1:
    252                         extsetup(self.ui)
    253                     else:
    254                         extsetup()
    255 
    256     # ISystemInfoProvider methods
    257 
    258     def get_system_info(self):
    259         if self._version is not None:
    260             yield 'Mercurial', self._version
    261 
    262     # IRepositoryConnector methods
    263    
    264     def get_supported_types(self):
    265         """Support for `repository_type = hg`"""
    266         if hg_import_error:
    267             self.error = hg_import_error
    268             yield ("hg", -1)
    269         else:
    270             yield ("hg", 8)
    271 
    272     def get_repository(self, type, dir, params):
    273         """Return a `MercurialRepository`"""
     239            self.env.systeminfo.append(('Mercurial', self._version))
    274240        options = {}
    275241        for key, val in self.config.options(type):
     
    281247        repos.version_info = self._version_info
    282248        return repos
     249
    283250
    284251    # IWikiSyntaxProvider methods
     
    326293       
    327294class trac_ui(ui):
    328     def __init__(self, *args, **kwargs):
     295    def __init__(self, log, *args, **kwargs):
    329296        ui.__init__(self, *args)
    330297        self.setconfig('ui', 'interactive', 'off')
    331         self.log = kwargs.get('log', args and args[0].log or None)
     298        self.log = log
    332299       
    333     def write(self, *args, **opts):
     300    def write(self, *args):
    334301        for a in args:
    335302            self.log.info('(mercurial status) %s', a)
    336303
    337     def write_err(self, *args, **opts):
     304    def write_err(self, *args):
    338305        for a in args:
    339306            self.log.warn('(mercurial warning) %s', a)
    340307
    341     def plain(self):
    342         return True
    343 
    344     def interactive(self):
     308    def isatty(self):
    345309        return False
    346310
     
    430394
    431395    def normalize_path(self, path):
    432         """Remove leading "/", except for the root."""
     396        """Remove leading "/", except for the root"""
    433397        return path and path.strip('/') or ''
    434398
    435399    def normalize_rev(self, rev):
    436         """Return the full hash for the specified rev."""
     400        """Return the changelog node for the specified rev"""
    437401        if rev is not None:
    438402            rev = str(rev)
    439         return hex(self.hg_node(rev))
     403        return self.hg_display(self.hg_node(rev))
    440404
    441405    def short_rev(self, rev):
     
    452416                return rev # it was already a short rev
    453417        return self.repo.changelog.rev(self.hg_node(rev))
    454 
    455     def display_rev(self, rev):
    456         return self.hg_display(self.hg_node(rev))
    457418
    458419    def get_quickjump_entries(self, rev):
     
    558519
    559520    def get_oldest_rev(self):
    560         return hex(nullid)
     521        return self.hg_display(nullid)
    561522
    562523    def get_youngest_rev(self):
    563         return hex(self.repo.changelog.tip())
     524        return self.hg_display(self.repo.changelog.tip())
    564525
    565526    def previous_rev(self, rev, path=''): # FIXME: path ignored for now
     
    568529        for p in log.parents(n):
    569530            if p != nullid:
    570                 return hex(p) # always follow first parent
     531                return self.hg_display(p) # always follow first parent
    571532   
    572533    def next_rev(self, rev, path=''):
     
    576537            if fc: # it is a file
    577538                for child_fc in fc.children():
    578                     return hex(child_fc.node())
     539                    return self.hg_display(child_fc.node())
    579540                else:
    580541                    return None
     
    582543        log = self.repo.changelog
    583544        for c in log.children(n):
    584             return hex(c) # always follow first child
     545            return self.hg_display(c) # always follow first child
    585546   
    586547    def rev_older_than(self, rev1, rev2):
     
    738699                node = log.tip()
    739700            else:
    740                 raise NoSuchNode(path, hex(self.n))
     701                raise NoSuchNode(path, self.repos.hg_display(self.n))
    741702        self.time = self.repos.hg_time(log.read(node)[2])
    742         rev = hex(node)
     703        rev = self.repos.hg_display(node)
    743704        Node.__init__(self, self.repos, path, rev, kind)
    744705        self.created_path = path
     
    834795                count += 1
    835796                yield entry
    836             entry = (path, hex(ctx.node()), Changeset.EDIT)
     797            entry = (path, self.repos.hg_display(ctx.node()), Changeset.EDIT)
    837798        if entry:
    838799            if count < limit:
     
    866827                    yield entry
    867828                n = repo.changelog.node(rev)
    868                 entry = (path, hex(n), Changeset.EDIT)
     829                entry = (path, self.repos.hg_display(n), Changeset.EDIT)
    869830        if entry:
    870831            if count < limit:
     
    918879            extra = log_data[5]
    919880        time = repos.hg_time(timeinfo)
    920         Changeset.__init__(self, repos, hex(n), to_unicode(desc),
     881        Changeset.__init__(self, repos, repos.hg_display(n), to_unicode(desc),
    921882                           to_unicode(user), time)
    922883        self.repos = repos
     
    924885        self.manifest_n = manifest
    925886        self.files = files
    926         self.parents = [hex(p) for p in log.parents(n) if p != nullid]
    927         self.children = [hex(c) for c in log.children(n)]
     887        self.parents = [repos.hg_display(p) for p in log.parents(n) \
     888                        if p != nullid]
     889        self.children = [repos.hg_display(c) for c in log.children(n)]
    928890        self.tags = [t for t in repos.repo.nodetags(n)]
    929891        self.branch = extra.pop("branch", None)
     
    991953                    base_path, base_filenode = rename_info
    992954                    base_ctx = repo.filectx(base_path, fileid=base_filenode)
    993                     base_rev = hex(base_ctx.node())
     955                    base_rev = self.repos.hg_display(base_ctx.node())
    994956                    if base_path in deletions:
    995957                        action = Changeset.MOVE
     
    1010972            yield change
    1011973
    1012     def get_branches(self):
    1013         """Yield branch names to which this changeset belong."""
    1014         return self.branch and [(self.branch, len(self.children) == 0)] or []
    1015 
Note: See TracChangeset for help on using the changeset viewer.