view website/issues/extensions/local_replace.py @ 7743:79779293d77b

doc: add reference to full email address and purpose for lists Added purpose for lists to the mailing list table. Also added headers. Some grammar fixups. Promote WebChat IRC interface over client interface as many people don't have clients installed anymore 8-(. Added a sentence that guides the user to the address of the mailing list. I added this after getting an issue about a request that should have gone to the mailing list. I realised there was no reference to the mailing lists' domain: @lists.sourceforge.net on the contact page. I think the linked subscribe page used to provide a hint, but it doesn't look like it does anymore. I wonder if we should add a mailto: link there? Does sphinx obscure it enough to prevent bot spamming?
author John Rouillard <rouilj@ieee.org>
date Wed, 21 Feb 2024 12:38:05 -0500
parents ca62a7cc3c9b
children 9c3ec0a5c7fc
line wrap: on
line source

from __future__ import print_function
import re

hg_url_base = r'http://sourceforge.net/p/roundup/code/ci/'

substitutions = [ (re.compile(r'debian:\#(?P<id>\d+)'),
                   r'<a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=\g<id>">debian#\g<id></a>' ),
                  (re.compile(r'\#(?P<ws>\s*)(?P<id>\d+)'),
                   r"<a href='issue\g<id>'>#\g<ws>\g<id></a>" ),
                  (re.compile(r'(?P<prews>^|\s+)issue(?P<ws>\s*)(?P<id>\d+)'),
                   r"\g<prews><a href='issue\g<id>'>issue\g<ws>\g<id></a>" ),
                  # matching the typical number:hash format of hg's own output
                  # and then use use hash instead of the number
                  (re.compile(r'(?P<prews>(^|\s+))(?P<revstr>(rev\s*|hg\s*|changeset:   ))(?P<revnumber>\d+):(?P<refhash>[0-9a-fA-F]{12,40})(?P<post>\W+|$)'),
                      r'\g<prews><a href="' + hg_url_base + '\g<refhash>">\g<revstr>\g<revnumber>:\g<refhash></a>\g<post>'),
                  # matching hg revison number or hash
                  (re.compile(r'(?P<prews>(^|\s+))(?P<revstr>(revision|rev|r)\s?)(?P<revision>([1-9][0-9]*)|[0-9a-fA-F]{4,40})(?P<post>\W+|$)'),
                   r'\g<prews><a href="' + hg_url_base + '\g<revision>">\g<revstr>\g<revision></a>\g<post>'),
                  ]

def local_replace(message):

    for cre, replacement in substitutions:
        message = cre.sub(replacement, message)

    return message


def init(instance):
    instance.registerUtil('localReplace', local_replace)

def quicktest(msgstr, should_replace = True, substr = True):
    testcount['run'] += 1
    replacedstr = local_replace(msgstr)

    if not (not replacedstr == msgstr ) == should_replace:
        print("(fail)", end=' ')
        testcount['failed'] += 1
    elif substr and (msgstr not in replacedstr):
        print("(fail)", end=' ')
        testcount['failed'] += 1

    if replacedstr == msgstr:
        print( "'%s'" % (msgstr,))
    else:
        print("'%s' -> '%s'" % (msgstr, replacedstr))

if "__main__" == __name__:
    testcount = {'run':0 , 'failed': 0}
    print("Replacement examples:")
    quicktest(" debian:#222", substr=False)
    quicktest(" #555", substr=False)
    quicktest("issue333")
    quicktest(" revision 222", substr=False)
    quicktest(" r 222", substr=False)
    quicktest(" wordthatendswithr 222", False)
    quicktest(" references", False)
    quicktest(" too many spaces r  222", False)
    quicktest("re-evaluate", False)
    quicktest("rex140eb", False)
    quicktest("rev 012", False) # too short for a hg hash
    quicktest("rev 0123")
    quicktest("re140eb")
    quicktest(" r7140eb", substr=False)
    quicktest(" rev7140eb ", substr=False)
    quicktest("rev7140eb")
    quicktest("rev7140eb,", substr=False)
    quicktest("rev4891:ad3d628e73f2")
    quicktest("hg4891:ad3d628e73f2")
    quicktest("changeset:   4542:46239c21a1eb")
    quicktest("rev 4542:46239c21a1eb")
    quicktest("rev    4542:46239c21a1eb") # many spaces
    print()
    print(testcount)

Roundup Issue Tracker: http://roundup-tracker.org/