Exemplo n.º 1
0
    def get_timeline_events(self, req, start, stop, filters):
        if 'remote_changeset' in filters:
            for source in SubscriptionManager(self.env).get_subscriptions('changeset'):
                env = open_env(source)
                
                # Try to isolate the base URL to the other Trac
                base = ''
                if env in self.env_map: # First use our own mapping
                    base = self.env_map[base]
                else:
                    env_basename = os.path.split(env.path.rstrip(os.sep))[1]
                    if self.config.get('intertrac', env_basename+'.url'): # Then try using an intertrac link
                        base = self.config.get('intertrac', env_basename+'.url')
                    else: # And finally look for a sibling path
                        self.log.debug('ChangesetSubscribable: Falling back to sibling computation, base is %s'%env_basename)
                        url = req.href().rstrip('/').split('/')
                        url.pop()
                        url.append(env_basename)
                        base = '/'.join(url)

                self.log.debug('ChangesetSubscribable: Computed base URL of %s to be %s'%(env.path, base))
                new_href = Href(base)
                env.href = new_href
                new_req = PseudoRequest(req, new_href)
                cset = ChangesetModule(env)
                try:
                    for ret in cset.get_timeline_events(new_req, start, stop, ['changeset']):
                        kind, href, title, date, author, message = ret
                        title += Markup(' from %s',env.config.get('project','name',env.path))
                        yield (kind, href, title, date, author, message)
                except Exception, e:
                    self.log.debug('ChangesetSubscribable: %s'%traceback.format_exc())
                    raise e
Exemplo n.º 2
0
 def expand_macro(self, formatter, name, content, args={}):
     reponame = args.get('repository') or ''
     rev = args.get('revision')
     repos = RepositoryManager(self.env).get_repository(reponame)
     try:
         changeset = repos.get_changeset(rev)
         message = changeset.message
         rev = changeset.rev
         resource = repos.resource
     except Exception:
         message = content
         resource = Resource('repository', reponame)
     if formatter.context.resource.realm == 'ticket':
         ticket_re = CommitTicketUpdater.ticket_re
         if not any(
                 int(tkt_id) == int(formatter.context.resource.id)
                 for tkt_id in ticket_re.findall(message)):
             return tag.p(
                 "(The changeset message doesn't reference this "
                 "ticket)",
                 class_='hint')
     if ChangesetModule(self.env).wiki_format_messages:
         return tag.div(format_to_html(self.env,
                                       formatter.context.child(
                                           'changeset',
                                           rev,
                                           parent=resource),
                                       message,
                                       escape_newlines=True),
                        class_='message')
     else:
         return tag.pre(message, class_='message')
Exemplo n.º 3
0
 def expand_macro(self, formatter, name, content, args=None):
     # pylint: disable=too-many-function-args
     args = args or {}
     reponame = args.get('repository') or ''
     rev = args.get('revision')
     # pylint: disable=no-member
     repos = RepositoryManager(self.env).get_repository(reponame)
     try:
         changeset = repos.get_changeset(rev)
         message = changeset.message
         rev = changeset.rev
         resource = repos.resource
     except Exception:  # pylint: disable=broad-except
         message = content
         resource = Resource('repository', reponame)
     if ChangesetModule(self.env).wiki_format_messages:
         return tag.div(format_to_html(self.env,
                                       formatter.context.child(
                                           'changeset',
                                           rev,
                                           parent=resource),
                                       message,
                                       escape_newlines=True),
                        class_='message')
     else:
         return tag.pre(message, class_='message')
Exemplo n.º 4
0
    def get_timeline_events(self, req, start, stop, filters):
        if 'remote_changeset' in filters:
            for source in SubscriptionManager(
                    self.env).get_subscriptions('changeset'):
                env = open_env(source)

                # Try to isolate the base URL to the other Trac
                base = ''
                if env in self.env_map:  # First use our own mapping
                    base = self.env_map[base]
                else:
                    env_basename = os.path.split(env.path.rstrip(os.sep))[1]
                    if self.config.get(
                            'intertrac', env_basename +
                            '.url'):  # Then try using an intertrac link
                        base = self.config.get('intertrac',
                                               env_basename + '.url')
                    else:  # And finally look for a sibling path
                        self.log.debug(
                            'ChangesetSubscribable: Falling back to sibling computation, base is %s'
                            % env_basename)
                        url = req.href().rstrip('/').split('/')
                        url.pop()
                        url.append(env_basename)
                        base = '/'.join(url)

                self.log.debug(
                    'ChangesetSubscribable: Computed base URL of %s to be %s' %
                    (env.path, base))
                new_href = Href(base)
                env.href = new_href
                new_req = PseudoRequest(req, new_href)
                cset = ChangesetModule(env)
                try:
                    for ret in cset.get_timeline_events(
                            new_req, start, stop, ['changeset']):
                        kind, href, title, date, author, message = ret
                        title += Markup(
                            ' from %s',
                            env.config.get('project', 'name', env.path))
                        yield (kind, href, title, date, author, message)
                except Exception, e:
                    self.log.debug('ChangesetSubscribable: %s' %
                                   traceback.format_exc())
                    raise e
Exemplo n.º 5
0
class CommitTicketReferenceMacro(WikiMacroBase):
    """This is intended to replace the builtin macro by providing additional
    code review status info for the changeset.  To use, disable the builtin
    macro as follows:
    
    [components]
    tracopt.ticket.commit_updater.committicketreferencemacro = disabled
    """
    def expand_macro(self, formatter, name, content, args={}):
        reponame = args.get('repository') or ''
        rev = args.get('revision')
        repos = RepositoryManager(self.env).get_repository(reponame)
        try:
            changeset = repos.get_changeset(rev)
            message = changeset.message

            # add review status to commit message (
            review = CodeReview(self.env, reponame, rev)
            status = review.encode(review.status)
            message += '\n\n{{{#!html \n'
            message += '<div class="codereviewstatus">'
            message += '  <div class="system-message %s">' % status.lower()
            message += '    <p>Code review status: '
            message += '      <span>%s</span>' % review.status
            message += '    </p>'
            message += '  </div>'
            message += '</div>'
            message += '\n}}}'

            rev = changeset.rev
            resource = repos.resource
        except Exception, e:
            message = content
            resource = Resource('repository', reponame)
        if formatter.context.resource.realm == 'ticket':
            ticket_re = CommitTicketUpdater.ticket_re
            if not any(
                    int(tkt_id) == int(formatter.context.resource.id)
                    for tkt_id in ticket_re.findall(message)):
                return tag.p(
                    "(The changeset message doesn't reference this "
                    "ticket)",
                    class_='hint')
        if ChangesetModule(self.env).wiki_format_messages:
            return tag.div(format_to_html(self.env,
                                          formatter.context('changeset',
                                                            rev,
                                                            parent=resource),
                                          message,
                                          escape_newlines=True),
                           class_='message')
        else:
            return tag.pre(message, class_='message')
Exemplo n.º 6
0
 def expand_macro(self, formatter, name, content, args=None):
     # pylint: disable=too-many-function-args
     args = args or {}
     reponame = args.get('repository') or ''
     rev = args.get('revision')
     # pylint: disable=no-member
     repos = RepositoryManager(self.env).get_repository(reponame)
     try:
         changeset = repos.get_changeset(rev)
         message = changeset.message
         rev = changeset.rev
         resource = repos.resource
     except Exception:  # pylint: disable=broad-except
         message = content
         resource = Resource('repository', reponame)
     config = self.ticket_replace_section
     fields = {}
     for key, value in config.options():
         idx = key.rfind('.')
         if idx >= 0:
             prefix, attribute = key[:idx], key[idx + 1:]
             field = fields.setdefault(prefix, {})
             field[attribute] = config.get(key)
         else:
             fields[key] = {'': value}
     for prefix, field in fields.iteritems():
         if not all(k in field for k in ['pattern', 'replace']):
             self.log.warn(
                 "Ignoring [%s] %s, missing .pattern or .replace" %
                 (self.ticket_replace_section_name, key))
             continue
         subst = {'repository': reponame, 'revision': rev}
         pattern = field['pattern'].replace('$(', '%(') % subst
         replace = field['replace'].replace('$(', '%(') % subst
         message = re.sub(pattern, replace, message)
     if ChangesetModule(self.env).wiki_format_messages:
         message = '\n'.join(
             map(lambda line: "> " + line, message.split('\n')))
         return tag.div(format_to_html(self.env,
                                       formatter.context.child(
                                           'changeset',
                                           rev,
                                           parent=resource),
                                       message,
                                       escape_newlines=True),
                        class_='message')
     else:
         return tag.pre(message, class_='message')
Exemplo n.º 7
0
    def expand_macro(self, formatter, name, content, args={}):
        reponame = args.get('repository') or ''
        rev_str = args.get('revision')
        repos = RepositoryManager(self.env).get_repository(reponame)
        rev = None
        try:
            changeset = repos.get_changeset(repos.normalize_rev(rev_str))
            message = changeset.message
            rev = repos.db_rev(changeset.rev)
            resource = repos.resource

            # add review status to commit message (
            review = CodeReview(self.env, reponame, rev)
            status = review.encode(review.status)
            message += '\n\n{{{#!html \n'
            message += '<div class="codereviewstatus">'
            message += '  <div class="system-message %s">' % status.lower()
            message += '    <p>Code review status: '
            message += '      <span>%s</span>' % review.status
            message += '    </p>'
            message += '  </div>'
            message += '</div>'
            message += '\n}}}'

        except Exception:
            message = content
            resource = Resource('repository', reponame)
        if formatter.context.resource.realm == 'ticket':
            ticket_re = CommitTicketUpdater.ticket_re
            if not any(
                    int(tkt_id) == int(formatter.context.resource.id)
                    for tkt_id in ticket_re.findall(message)):
                return tag.p(
                    "(The changeset message doesn't reference this "
                    "ticket)",
                    class_='hint')
        if ChangesetModule(self.env).wiki_format_messages:
            ctxt = formatter.context
            return tag.div(format_to_html(self.env,
                                          ctxt('changeset',
                                               rev,
                                               parent=resource),
                                          message,
                                          escape_newlines=True),
                           class_='message')
        else:
            return tag.pre(message, class_='message')
Exemplo n.º 8
0
 def expand_macro(self, formatter, name, content, args={}):
     if args:
         reponame = args.get('repository', '')
         rev = args.get('revision')
     else:
         if ',' in content:
             reponame = ''
             rev = 0
             for c in [x.strip() for x in content.split(',')]:
                 if c.isnumeric():
                     rev = c
                 else:
                     reponame = c
         else:
             rev = content.strip()
             reponame = ''
     repos = RepositoryManager(self.env).get_repository(reponame)
     if repos:
         changeset = repos.get_changeset(rev)
         message = changeset.message
         rev = changeset.rev
     else:
         message = content
     if formatter.context.resource.realm == 'ticket':
         ticket_re = CommitTicketUpdater.ticket_re
         if not any(int(tkt_id) == formatter.context.resource.id
                    for tkt_id in ticket_re.findall(message)):
             return tag.div(tag.p(_("(The changeset message doesn't "
                 "reference this ticket)"), class_='hint'),
                 class_='commitmessage')
     if ChangesetModule(self.env).wiki_format_messages:
         return tag.div(format_to_html(self.env,
             formatter.context('changeset', rev, parent=repos.resource),
             message, escape_newlines=True), class_='commitmessage')
     else:
         return tag.pre(message, class_='commitmessage')
Exemplo n.º 9
0
 def setUp(self):
     self.env = EnvironmentStub()
     self.cm = ChangesetModule(self.env)