Exemplo n.º 1
0
def guess_homepage():
    for datum in guess_upstream_metadata_items('.',
                                               trust_package=trust_package()):
        if datum.field != 'Homepage':
            continue
        if not meets_minimum_certainty(datum.certainty):
            continue
        if known_bad_guess(datum):
            continue
        return datum
Exemplo n.º 2
0
def fix_close_typo(package, m):
    global certainty
    bugno = int(m.group('bug'))
    (valid, bug_certainty) = check_bug(package, bugno)
    if meets_minimum_certainty(bug_certainty) and valid:
        certainty = min_certainty([certainty, bug_certainty])
        fixed_lintian_tag(
            'all', 'misspelled-closes-bug',
            info='#%s' % m.group('bug'))
        return '%ss: #%s' % (m.group('close'), m.group('bug'))
    else:
        return m.group(0)
Exemplo n.º 3
0
def fix_close_colon(package, m):
    global certainty
    bugno = int(m.group('bug'))
    (valid, bug_certainty) = check_bug(package, bugno)
    if meets_minimum_certainty(bug_certainty) and valid:
        certainty = min_certainty([certainty, bug_certainty])
        fixed_lintian_tag(
            'all', "possible-missing-colon-in-closes",
            info='%s #%d' % (m.group('closes'), bugno))
        return '%s: #%d' % (m.group('closes'), bugno)
    else:
        return m.group(0)
def add_upstream_metadata(copyright):
    if copyright.header.upstream_name and copyright.header.upstream_contact:
        return
    import ruamel.yaml
    try:
        with open('debian/upstream/metadata', 'r') as f:
            inp = f.read()
    except FileNotFoundError:
        upstream_metadata = {}
    else:
        code = ruamel.yaml.safe_load(inp)
        upstream_metadata = {
            k: UpstreamDatum(k, v, 'certain')
            for (k, v) in code.items()
        }
    for datum in guess_upstream_metadata_items('.',
                                               trust_package=trust_package()):
        if not meets_minimum_certainty(datum.certainty):
            continue
        if (datum.field not in upstream_metadata
                or upstream_metadata[datum.field].certainty != 'certain'):
            upstream_metadata[datum.field] = datum

    if not copyright.header.upstream_name:
        try:
            datum = upstream_metadata['Name']
        except KeyError:
            pass
        else:
            if datum.value:
                copyright.header.upstream_name = datum.value
                fields.append('Upstream-Name')
                achieved_certainty.append(datum.certainty)

    if not copyright.header.upstream_contact:
        try:
            datum = upstream_metadata['Contact']
        except KeyError:
            pass
        else:
            if datum.value:
                value = datum.value
                if isinstance(value, str):
                    value = [value]
                copyright.header.upstream_contact = value
                fields.append('Upstream-Contact')
                achieved_certainty.append(datum.certainty)
Exemplo n.º 5
0
    FilesParagraph,
    LicenseParagraph,
    License,
)
from lintian_brush.fixer import (
    report_result,
    meets_minimum_certainty,
    fixed_lintian_tag,
)

import os
import sys

CERTAINTY = 'possible'

if not meets_minimum_certainty(CERTAINTY):
    sys.exit(0)

if os.path.exists('debian/copyright'):
    sys.exit(0)

try:
    import decopy  # noqa: F401
except ModuleNotFoundError:
    # No decopy
    sys.exit(2)

from decopy.tree import RootInfo, DirInfo  # noqa: E402
from decopy.datatypes import License as DecopyLicense  # noqa: E402
from decopy.dep5 import Copyright as DecopyCopyright, Group  # noqa: E402
from decopy.cmdoptions import process_options  # noqa: E402
    external_present_fields = set(['Homepage'])

    # If the debian/copyright file is machine-readable, then we do
    # not need to set the Name/Contact information in the
    # debian/upstream/metadata file.
    if 'Name' in upstream_metadata or 'Contact' in upstream_metadata:
        from debmutate.copyright import upstream_fields_in_copyright
        external_present_fields.update(upstream_fields_in_copyright().keys())

    for key, datum in list(upstream_metadata.items()):
        # Drop keys that don't need to be in debian/upstream/metadata
        if key.startswith('X-') or key in external_present_fields:
            del upstream_metadata[key]

        # Drop everything that is below our minimum certainty
        elif not meets_minimum_certainty(datum.certainty):
            del upstream_metadata[key]

    achieved_certainty = min_certainty(
        [d.certainty for d in upstream_metadata.values()])

    fix_upstream_metadata(upstream_metadata)

    changed = {
        k: v
        for k, v in upstream_metadata.items() if v.value != editor.code.get(k)
    }

    if not changed:
        sys.exit(0)
Exemplo n.º 7
0
 from lintian_brush.patches import (
     tree_non_patches_changes,
     find_patches_directory,
 )
 from breezy import errors
 from breezy.workingtree import WorkingTree
 patches_directory = find_patches_directory('.')
 if patches_directory not in ('debian/patches', None):
     # Non-standard patches directory.
     warn('Tree has non-standard patches directory %s.' %
          (patches_directory))
 else:
     try:
         tree, path = WorkingTree.open_containing('.')
     except errors.NotBranchError as e:
         if not meets_minimum_certainty('possible'):
             warn('unable to open vcs to check for delta: %s' % e)
             sys.exit(0)
         format = "3.0 (quilt)"
         description = "Upgrade to newer source format %s." % format
     else:
         delta = list(tree_non_patches_changes(tree, patches_directory))
         if delta:
             warn('Tree has non-quilt changes against upstream.')
             if opinionated():
                 format = "3.0 (quilt)"
                 description = ("Upgrade to newer source format %s." %
                                format)
                 try:
                     with open('debian/source/options', 'r') as f:
                         options = list(f.readlines())