Debian

Available patches from Ubuntu

To see Ubuntu differences wrt. to Debian, write down a grep-dctrl query identifying the packages you're interested in:
grep-dctrl -n -sPackage Sources.Debian
(e.g. -FPackage linux-ntfs or linux-ntfs)

Modified packages are listed below:

Debian ( Changelog | PTS | Bugs ) Ubuntu ( Changelog | txt | LP | Bugs ) | Diff from Ubuntu

Source: pylint

pylint (2.6.0-2ubuntu1) hirsute; urgency=medium [ Ondřej Nový ] * d/control: Update Vcs-* fields with new Debian Python Team Salsa layout. [ Mattia Rizzolo ] * Require newer astroid to support python 3.9. * Add patches from upstream to support python 3.9. -- Mattia Rizzolo <mapreri@ubuntu.com> Thu, 03 Dec 2020 17:28:22 +0100

Modifications :
  1. Download patch debian/control

    --- 2.6.0-1/debian/control 2020-09-20 03:18:39.000000000 +0000 +++ 2.6.0-2ubuntu1/debian/control 2020-12-03 16:28:22.000000000 +0000 @@ -1,12 +1,13 @@ Source: pylint Section: python Priority: optional -Maintainer: Sandro Tosi <morph@debian.org> +Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> +XSBC-Original-Maintainer: Sandro Tosi <morph@debian.org> Uploaders: Python Applications Packaging Team <python-apps-team@lists.alioth.debian.org>, Build-Depends: debhelper-compat (= 13), dh-python, python3-all, -Build-Depends-Indep: python3-astroid (>= 2.4.0), +Build-Depends-Indep: python3-astroid (>= 2.4.2-2ubuntu1), python3-docs-theme, python3-isort, python3-mccabe, @@ -19,8 +20,8 @@ Build-Depends-Indep: python3-astroid (>= Standards-Version: 4.5.0 Rules-Requires-Root: no Homepage: https://www.pylint.org/ -Vcs-Git: https://salsa.debian.org/python-team/applications/pylint.git -Vcs-Browser: https://salsa.debian.org/python-team/applications/pylint +Vcs-Git: https://salsa.debian.org/python-team/packages/pylint.git +Vcs-Browser: https://salsa.debian.org/python-team/packages/pylint Package: pylint-doc Section: doc
  2. Download patch debian/patches/series

    --- 2.6.0-1/debian/patches/series 2020-09-20 03:18:39.000000000 +0000 +++ 2.6.0-2ubuntu1/debian/patches/series 2020-12-03 16:28:22.000000000 +0000 @@ -1,2 +1,3 @@ avoid-pip.patch gh_issue_3198.patch +3890.patch
  3. Download patch debian/patches/3890.patch

    --- 2.6.0-1/debian/patches/3890.patch 1970-01-01 00:00:00.000000000 +0000 +++ 2.6.0-2ubuntu1/debian/patches/3890.patch 2020-12-03 16:28:22.000000000 +0000 @@ -0,0 +1,189 @@ +Description: fixes for python 3.9 +Origin: https://github.com/PyCQA/pylint/pull/3890 + +--- a/pylint/checkers/typecheck.py ++++ b/pylint/checkers/typecheck.py +@@ -65,7 +65,7 @@ + import astroid.arguments + import astroid.context + import astroid.nodes +-from astroid import bases, decorators, exceptions, modutils, objects ++from astroid import bases, decorators, exceptions, helpers, modutils, objects + from astroid.interpreter import dunder_lookup + + from pylint.checkers import BaseChecker, utils +@@ -1721,9 +1721,18 @@ + return + + inferred = safe_infer(node.value) ++ + if inferred is None or inferred is astroid.Uninferable: + return + ++ if getattr(inferred, "decorators", None): ++ first_decorator = helpers.safe_infer(inferred.decorators.nodes[0]) ++ if isinstance(first_decorator, astroid.ClassDef): ++ inferred = first_decorator.instantiate_class() ++ else: ++ return # It would be better to handle function ++ # decorators, but let's start slow. ++ + if not supported_protocol(inferred): + self.add_message(msg, args=node.value.as_string(), node=node.value) + +--- a/tests/checkers/unittest_typecheck.py ++++ b/tests/checkers/unittest_typecheck.py +@@ -24,6 +24,7 @@ + import pytest + + from pylint.checkers import typecheck ++from pylint.interfaces import UNDEFINED + from pylint.testutils import CheckerTestCase, Message, set_config + + try: +@@ -357,3 +358,139 @@ + Message("not-callable", node=call, args="get_num(10)") + ): + self.checker.visit_call(call) ++ ++ ++class TestTypeCheckerOnDecorators(CheckerTestCase): ++ "Tests for pylint.checkers.typecheck on decorated functions." ++ CHECKER_CLASS = typecheck.TypeChecker ++ ++ def test_issue3882_class_decorators(self): ++ decorators = """ ++ class Unsubscriptable: ++ def __init__(self, f): ++ self.f = f ++ ++ class Subscriptable: ++ def __init__(self, f): ++ self.f = f ++ ++ def __getitem__(self, item): ++ return item ++ """ ++ for generic in "Optional", "List", "ClassVar", "Final", "Literal": ++ self.typing_objects_are_subscriptable(generic) ++ ++ self.getitem_on_modules() ++ self.decorated_by_a_subscriptable_class(decorators) ++ self.decorated_by_an_unsubscriptable_class(decorators) ++ ++ self.decorated_by_subscriptable_then_unsubscriptable_class(decorators) ++ self.decorated_by_unsubscriptable_then_subscriptable_class(decorators) ++ ++ def getitem_on_modules(self): ++ """Mainly validate the code won't crash if we're not having a function.""" ++ module = astroid.parse( ++ """ ++ import collections ++ test = collections[int] ++ """ ++ ) ++ subscript = module.body[-1].value ++ with self.assertAddsMessages( ++ Message( ++ "unsubscriptable-object", ++ node=subscript.value, ++ args="collections", ++ confidence=UNDEFINED, ++ ) ++ ): ++ self.checker.visit_subscript(subscript) ++ ++ def typing_objects_are_subscriptable(self, generic): ++ module = astroid.parse( ++ """ ++ import typing ++ test = typing.{}[int] ++ """.format( ++ generic ++ ) ++ ) ++ subscript = module.body[-1].value ++ with self.assertNoMessages(): ++ self.checker.visit_subscript(subscript) ++ ++ def decorated_by_a_subscriptable_class(self, decorators): ++ module = astroid.parse( ++ decorators ++ + """ ++ @Subscriptable ++ def decorated(): ++ ... ++ ++ test = decorated[None] ++ """ ++ ) ++ subscript = module.body[-1].value ++ with self.assertNoMessages(): ++ self.checker.visit_subscript(subscript) ++ ++ def decorated_by_subscriptable_then_unsubscriptable_class(self, decorators): ++ module = astroid.parse( ++ decorators ++ + """ ++ @Unsubscriptable ++ @Subscriptable ++ def decorated(): ++ ... ++ ++ test = decorated[None] ++ """ ++ ) ++ subscript = module.body[-1].value ++ with self.assertAddsMessages( ++ Message( ++ "unsubscriptable-object", ++ node=subscript.value, ++ args="decorated", ++ confidence=UNDEFINED, ++ ) ++ ): ++ self.checker.visit_subscript(subscript) ++ ++ def decorated_by_unsubscriptable_then_subscriptable_class(self, decorators): ++ module = astroid.parse( ++ decorators ++ + """ ++ @Subscriptable ++ @Unsubscriptable ++ def decorated(): ++ ... ++ ++ test = decorated[None] ++ """ ++ ) ++ subscript = module.body[-1].value ++ with self.assertNoMessages(): ++ self.checker.visit_subscript(subscript) ++ ++ def decorated_by_an_unsubscriptable_class(self, decorators): ++ module = astroid.parse( ++ decorators ++ + """ ++ @Unsubscriptable ++ def decorated(): ++ ... ++ ++ test = decorated[None] ++ """ ++ ) ++ subscript = module.body[-1].value ++ with self.assertAddsMessages( ++ Message( ++ "unsubscriptable-object", ++ node=subscript.value, ++ args="decorated", ++ confidence=UNDEFINED, ++ ) ++ ): ++ self.checker.visit_subscript(subscript) +--- a/tests/functional/s/star_needs_assignment_target_py35.rc ++++ b/tests/functional/s/star_needs_assignment_target_py35.rc +@@ -1,2 +1,3 @@ + [testoptions] + min_pyver=3.5 ++max_pyver=3.8
  1. pylint