view website/issues/detectors/patches.py @ 7322:485cecfba982

Simplify TOC; older docs pushed a level down; Consolidate debugging Restructured docs.txt. Pulled out older documents into Old Docs. I wish I could add whitespace between documents in the toc. Current order split into groupings: Roundup Features Roundup Features Installing Roundup Upgrading to newer versions of Roundup Reporting Security Issues with Roundup Roundup FAQ User Guide Customising Roundup REST API for Roundup XML-RPC access to Roundup Roundup Reference Roundup Glossary Administration Guide License Acknowledgements Other Docs debugging.txt removed. Its contents replaced a reference in developer.txt. Added olderdocs for: docs/upgrading-history docs/tracker_templates Design Overview <docs/overview> Design (original) <docs/design> docs/developers Notes about the MySQL Database backend <docs/mysql> Notes about the PostgreSQL Database backend <docs/postgresql> Richard Jones implementation notes <docs/implementation> docs/security-history to keep them out of the docs.txt sidebar.
author John Rouillard <rouilj@ieee.org>
date Thu, 11 May 2023 13:50:57 -0400
parents 0942fe89e82e
children
line wrap: on
line source

# Auditor for patch files
# Patches should be declared as text/plain (also .py files),
# independent of what the browser says, and
# the "patch" keyword should get set automatically.

import posixpath

patchtypes = ('.diff', '.patch')
sourcetypes = ('.diff', '.patch', '.py')

def ispatch(file, types):
    return posixpath.splitext(file)[1] in types

def patches_text_plain(db, cl, nodeid, newvalues):
    if ispatch(newvalues['name'], sourcetypes):
        newvalues['type'] = 'text/plain'

def patches_keyword(db, cl, nodeid, newvalues):
    # Check whether there are any new files
    newfiles = set(newvalues.get('files',()))
    if nodeid:
        newfiles -= set(db.issue.get(nodeid, 'files'))
    # Check whether any of these is a patch
    newpatch = False
    for fileid in newfiles:
        if ispatch(db.file.get(fileid, 'name'), patchtypes):
            newpatch = True
            break
    if newpatch:
        # Add the patch keyword if its not already there
        patchid = db.keyword.lookup("patch")
        oldkeywords = []
        if nodeid:
            oldkeywords = db.issue.get(nodeid, 'keywords')
            if patchid in oldkeywords:
                # This is already marked as a patch
                return
        if 'keywords' not in newvalues:
            newvalues['keywords'] = oldkeywords
        newvalues['keywords'].append(patchid)

def init(db):
    db.file.audit('create', patches_text_plain)
    db.issue.audit('create', patches_keyword)
    db.issue.audit('set', patches_keyword)

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