This is also broken, and I haven't actually reordered things properly yet. I shouldn't send things at the end of the day, clearly! :)
Will send a v3 at some point, at which point I'll also get the topic branch to match how I said it should be! Regards, Daniel > It will be unsupported by the time of release anyway. > > Signed-off-by: Daniel Axtens <[email protected]> > > --- > > v2: remove embarassing rebasing error > > My plan for this at the moment is to keep the pw3 topic branch looking > like: > > master ... [fixes] ... drop py2 ... [features] ... xmlrpc > > so as we do development, fixes will sit before dropping py2, and > features will sit after droppng py2. This will enable fixes to be > easily backported, but means that features don't have to develop > against both py2 and py3. I'm putting xmlrpc right at the end, so > we can take it or not depending on how we go with the tools. > > I want to be able to take things like Andrew's forthcoming Django3 > series - which is incompatible with Python 2 - and this seems like the > simplest way to meet everyone's different goals. > > Once we get 2.2 out the door and we go back to just developing on > master, we can think about how we want to handle this going forward. > --- > .travis.yml | 2 - > patchwork/fields.py | 4 +- > patchwork/filters.py | 8 +- > patchwork/management/commands/parsemail.py | 14 +- > patchwork/models.py | 15 +- > patchwork/parser.py | 54 +-- > patchwork/tests/api/validator.py | 9 +- > .../0018-git-pull-request-crlf-newlines.mbox | 348 ------------------ > patchwork/tests/test_bundles.py | 7 +- > patchwork/tests/test_completion.py | 1 - > patchwork/tests/test_list.py | 1 - > patchwork/tests/test_management.py | 2 +- > patchwork/tests/test_parser.py | 25 +- > patchwork/views/utils.py | 6 +- > requirements-dev.txt | 12 +- > requirements-prod.txt | 9 +- > tox.ini | 19 +- > 17 files changed, 49 insertions(+), 487 deletions(-) > delete mode 100644 > patchwork/tests/mail/0018-git-pull-request-crlf-newlines.mbox > > diff --git .travis.yml .travis.yml > index cc326840cdb2..ea79f884a88c 100644 > --- .travis.yml > +++ .travis.yml > @@ -4,8 +4,6 @@ dist: xenial > sudo: false > > python: > - - 2.7 > - - 3.5 > - 3.6 > - 3.7 > > diff --git patchwork/fields.py patchwork/fields.py > index dd29ea080319..6eca1a2f150d 100644 > --- patchwork/fields.py > +++ patchwork/fields.py > @@ -7,7 +7,6 @@ > import hashlib > > from django.db import models > -from django.utils import six > > > class HashField(models.CharField): > @@ -19,7 +18,8 @@ class HashField(models.CharField): > super(HashField, self).__init__(*args, **kwargs) > > def construct(self, value): > - if isinstance(value, six.text_type): > + # TODO: should this be unconditional? > + if isinstance(value, str): > value = value.encode('utf-8') > return hashlib.sha1(value) > > diff --git patchwork/filters.py patchwork/filters.py > index fb644f982136..12288eb9b7c6 100644 > --- patchwork/filters.py > +++ patchwork/filters.py > @@ -4,12 +4,11 @@ > # SPDX-License-Identifier: GPL-2.0-or-later > > import collections > +from urllib.parse import quote > > from django.contrib.auth.models import User > from django.utils.html import escape > from django.utils.safestring import mark_safe > -from django.utils import six > -from django.utils.six.moves.urllib.parse import quote > > from patchwork.models import Person > from patchwork.models import Series > @@ -547,8 +546,9 @@ class Filters: > del params[remove.param] > > def sanitise(s): > - if not isinstance(s, six.string_types): > - s = six.text_type(s) > + # TODO: should this be unconditional? > + if not isinstance(s, str): > + s = str(s) > return quote(s.encode('utf-8')) > > return '?' + '&'.join(['%s=%s' % (sanitise(k), sanitise(v)) > diff --git patchwork/management/commands/parsemail.py > patchwork/management/commands/parsemail.py > index ea85e3aabb5c..4c0f1ff1d4d8 100644 > --- patchwork/management/commands/parsemail.py > +++ patchwork/management/commands/parsemail.py > @@ -8,7 +8,6 @@ import logging > import sys > > from django.core.management import base > -from django.utils import six > > from patchwork.parser import parse_mail > from patchwork.parser import DuplicateMailError > @@ -37,18 +36,11 @@ class Command(base.BaseCommand): > try: > if infile: > logger.info('Parsing mail loaded by filename') > - if six.PY3: > - with open(infile, 'rb') as file_: > - mail = email.message_from_binary_file(file_) > - else: > - with open(infile) as file_: > - mail = email.message_from_file(file_) > + with open(infile, 'rb') as file_: > + mail = email.message_from_binary_file(file_) > else: > logger.info('Parsing mail loaded from stdin') > - if six.PY3: > - mail = email.message_from_binary_file(sys.stdin.buffer) > - else: > - mail = email.message_from_file(sys.stdin) > + mail = email.message_from_binary_file(sys.stdin.buffer) > except AttributeError: > logger.warning("Broken email ignored") > return > diff --git patchwork/models.py patchwork/models.py > index a908dd5cff40..57bd8c9bd4fb 100644 > --- patchwork/models.py > +++ patchwork/models.py > @@ -15,7 +15,6 @@ from django.contrib.auth.models import User > from django.core.exceptions import ValidationError > from django.db import models > from django.urls import reverse > -from django.utils.encoding import python_2_unicode_compatible > from django.utils.functional import cached_property > > from patchwork.fields import HashField > @@ -32,7 +31,6 @@ def validate_regex_compiles(regex_string): > raise ValidationError('Invalid regular expression entered!') > > > -@python_2_unicode_compatible > class Person(models.Model): > # properties > > @@ -55,7 +53,6 @@ class Person(models.Model): > verbose_name_plural = 'People' > > > -@python_2_unicode_compatible > class Project(models.Model): > # properties > > @@ -112,7 +109,6 @@ class Project(models.Model): > ordering = ['linkname'] > > > -@python_2_unicode_compatible > class DelegationRule(models.Model): > project = models.ForeignKey(Project, on_delete=models.CASCADE) > user = models.ForeignKey( > @@ -135,7 +131,6 @@ class DelegationRule(models.Model): > unique_together = (('path', 'project')) > > > -@python_2_unicode_compatible > class UserProfile(models.Model): > user = models.OneToOneField(User, unique=True, related_name='profile', > on_delete=models.CASCADE) > @@ -213,7 +208,6 @@ def _user_saved_callback(sender, created, instance, > **kwargs): > models.signals.post_save.connect(_user_saved_callback, sender=User) > > > -@python_2_unicode_compatible > class State(models.Model): > name = models.CharField(max_length=100) > ordering = models.IntegerField(unique=True) > @@ -230,7 +224,6 @@ class State(models.Model): > ordering = ['ordering'] > > > -@python_2_unicode_compatible > class Tag(models.Model): > name = models.CharField(max_length=20) > pattern = models.CharField( > @@ -347,7 +340,7 @@ class EmailMixin(models.Model): > # Modifying a submission via admin interface changes '\n' newlines in > # message content to '\r\n'. We need to fix them to avoid problems, > # especially as git complains about malformed patches when PW runs > - # on PY2 > + # on PY2 TODO: is this still needed on PY3? > self.content = self.content.replace('\r\n', '\n') > super(EmailMixin, self).save(*args, **kwargs) > > @@ -365,7 +358,6 @@ class FilenameMixin(object): > return fname > > > -@python_2_unicode_compatible > class Submission(FilenameMixin, EmailMixin, models.Model): > # parent > > @@ -418,7 +410,6 @@ class CoverLetter(Submission): > 'msgid': self.url_msgid}) > > > -@python_2_unicode_compatible > class Patch(Submission): > # patch metadata > > @@ -659,7 +650,6 @@ class Comment(EmailMixin, models.Model): > ] > > > -@python_2_unicode_compatible > class Series(FilenameMixin, models.Model): > """A collection of patches.""" > > @@ -774,7 +764,6 @@ class Series(FilenameMixin, models.Model): > verbose_name_plural = 'Series' > > > -@python_2_unicode_compatible > class SeriesReference(models.Model): > """A reference found in a series. > > @@ -859,7 +848,6 @@ class BundlePatch(models.Model): > ordering = ['order'] > > > -@python_2_unicode_compatible > class Check(models.Model): > > """Check for a patch. > @@ -1036,7 +1024,6 @@ class EmailConfirmation(models.Model): > super(EmailConfirmation, self).save() > > > -@python_2_unicode_compatible > class EmailOptout(models.Model): > email = models.CharField(max_length=200, primary_key=True) > > diff --git patchwork/parser.py patchwork/parser.py > index be1e51652dd3..a9271b933ea9 100644 > --- patchwork/parser.py > +++ patchwork/parser.py > @@ -16,7 +16,6 @@ import re > > from django.contrib.auth.models import User > from django.db.utils import IntegrityError > -from django.utils import six > > from patchwork.models import Comment > from patchwork.models import CoverLetter > @@ -76,20 +75,13 @@ def sanitise_header(header_contents, header_name=None): > # (e.g. base64 decoding) We probably can't recover, so: > return None > > - # We have some Py2/Py3 issues here. > + # We have some issues here. > # > - # Firstly, the email parser (before we get here) > - # Python 3: headers with weird chars are email.header.Header > - # class, others as str > - # Python 2: every header is an str > + # Firstly, in the email parser (before we get here) headers with weird > + # chars are email.header.Header class, others as str > # > - # Secondly, the behaviour of decode_header: > - # Python 3: weird headers are labelled as unknown-8bit > - # Python 2: weird headers are not labelled differently > - # > - # Lastly, aking matters worse, in Python2, unknown-8bit doesn't > - # seem to be supported as an input to make_header, so not only do > - # we have to detect dodgy headers, we have to fix them ourselves. > + # Secondly, the behaviour of decode_header: weird headers are labelled > + # as unknown-8bit > # > # We solve this by catching any Unicode errors, and then manually > # handling any interesting headers. > @@ -98,33 +90,22 @@ def sanitise_header(header_contents, header_name=None): > header = make_header(value, > header_name=header_name, > continuation_ws='\t') > - except (UnicodeDecodeError, LookupError, ValueError, TypeError): > + except (UnicodeDecodeError, LookupError, ValueError): > # - a part cannot be encoded as ascii. (UnicodeDecodeError), or > # - we don't have a codec matching the hint (LookupError) > - # - the codec has a null byte (Py3 ValueError/Py2 TypeError) > + # - the codec has a null byte (ValueError) > # Find out which part and fix it somehow. > # > - # We get here under Py2 when there's non-7-bit chars in header, > - # or under Py2 or Py3 where decoding with the coding hint fails. > + # We get here under where decoding with the coding hint fails. > > new_value = [] > > - for (part, coding) in value: > + for (part, _) in value: > # We have random bytes that aren't properly coded. > # If we had a coding hint, it failed to help. > - if six.PY3: > - # python3 - force coding to unknown-8bit > - new_value += [(part, 'unknown-8bit')] > - else: > - # python2 - no support in make_header for unknown-8bit > - # We should do unknown-8bit coding ourselves. > - # For now, we're just going to replace any dubious > - # chars with ?. > - # > - # TODO: replace it with a proper QP unknown-8bit codec. > - new_value += [(part.decode('ascii', errors='replace') > - .encode('ascii', errors='replace'), > - None)] > + > + # python3 - force coding to unknown-8bit > + new_value += [(part, 'unknown-8bit')] > > header = make_header(new_value, > header_name=header_name, > @@ -149,12 +130,7 @@ def clean_header(header): > if sane_header is None: > return None > > - # on Py2, we want to do unicode(), on Py3, str(). > - # That gets us the decoded, un-wrapped header. > - if six.PY2: > - header_str = unicode(sane_header) > - else: > - header_str = str(sane_header) > + header_str = str(sane_header) > > return normalise_space(header_str) > > @@ -572,7 +548,7 @@ def _find_content(mail): > payload = part.get_payload(decode=True) > subtype = part.get_content_subtype() > > - if not isinstance(payload, six.text_type): > + if not isinstance(payload, str): > charset = part.get_content_charset() > > # Check that we have a charset that we understand. Otherwise, > @@ -592,7 +568,7 @@ def _find_content(mail): > > for cset in try_charsets: > try: > - new_payload = six.text_type(payload, cset) > + new_payload = payload.decode(cset) > break > except UnicodeDecodeError: > new_payload = None > diff --git patchwork/tests/api/validator.py patchwork/tests/api/validator.py > index ad4d7f156cbe..07b2aa74647e 100644 > --- patchwork/tests/api/validator.py > +++ patchwork/tests/api/validator.py > @@ -9,7 +9,6 @@ import re > import django > from django.urls import resolve > from django.urls.resolvers import get_resolver > -from django.utils import six > import openapi_core > from openapi_core.schema.schemas.models import Format > from openapi_core.wrappers.base import BaseOpenAPIResponse > @@ -39,7 +38,7 @@ class RegexValidator(object): > self.regex = re.compile(regex, re.IGNORECASE) > > def __call__(self, value): > - if not isinstance(value, six.text_type): > + if not isinstance(value, str): > return False > > if not value: > @@ -49,16 +48,16 @@ class RegexValidator(object): > > > CUSTOM_FORMATTERS = { > - 'uri': Format(six.text_type, RegexValidator( > + 'uri': Format(str, RegexValidator( > r'^(?:http|ftp)s?://' > > r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' > # noqa > r'localhost|' > r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' > r'(?::\d+)?' > r'(?:/?|[/?]\S+)$')), > - 'iso8601': Format(six.text_type, RegexValidator( > + 'iso8601': Format(str, RegexValidator( > r'^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{6}$')), > - 'email': Format(six.text_type, RegexValidator( > + 'email': Format(str, RegexValidator( > r'[^@]+@[^@]+\.[^@]+')), > } > > diff --git patchwork/tests/mail/0018-git-pull-request-crlf-newlines.mbox > patchwork/tests/mail/0018-git-pull-request-crlf-newlines.mbox > deleted file mode 100644 > index bad78aee6d3f..000000000000 > --- patchwork/tests/mail/0018-git-pull-request-crlf-newlines.mbox > +++ /dev/null > @@ -1,348 +0,0 @@ > -From [email protected] Fri Oct 22 11:51:02 2010 > -Return-Path: <[email protected]> > -X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on bilbo.ozlabs.org > -X-Spam-Level: > -X-Spam-Status: No, score=0.0 required=3.0 tests=none autolearn=disabled > - version=3.3.1 > -X-Original-To: [email protected] > -Delivered-To: [email protected] > -Received: from bilbo.ozlabs.org (localhost [127.0.0.1]) > - by ozlabs.org (Postfix) with ESMTP id ED4B3100937 > - for <[email protected]>; Fri, 22 Oct 2010 14:51:54 +1100 (EST) > -Received: by ozlabs.org (Postfix) > - id BF799B70CB; Fri, 22 Oct 2010 14:51:50 +1100 (EST) > -Delivered-To: [email protected] > -Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) > - (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) > - (Client did not present a certificate) > - by ozlabs.org (Postfix) with ESMTPS id 94629B7043 > - for <[email protected]>; Fri, 22 Oct 2010 14:51:49 +1100 (EST) > -Received: from [IPv6:::1] (localhost.localdomain [127.0.0.1]) > - by gate.crashing.org (8.14.1/8.13.8) with ESMTP id o9M3p3SP018234; > - Thu, 21 Oct 2010 22:51:04 -0500 > -Subject: [git pull] Please pull powerpc.git next branch > -From: Benjamin Herrenschmidt <[email protected]> > -To: Linus Torvalds <[email protected]> > -Date: Fri, 22 Oct 2010 14:51:02 +1100 > -Message-ID: <1287719462.2198.37.camel@pasglop> > -Mime-Version: 1.0 > -X-Mailer: Evolution 2.30.3 > -Cc: linuxppc-dev list <[email protected]>, > - Andrew Morton <[email protected]>, > - Linux Kernel list <[email protected]> > -X-BeenThere: [email protected] > -X-Mailman-Version: 2.1.13 > -Precedence: list > -List-Id: Linux on PowerPC Developers Mail List <cbe-oss-dev.ozlabs.org> > -List-Unsubscribe: <https://lists.ozlabs.org/options/linuxppc-dev>, > - <mailto:[email protected]?subject=unsubscribe> > -List-Archive: <http://lists.ozlabs.org/pipermail/linuxppc-dev> > -List-Post: <mailto:[email protected]> > -List-Help: <mailto:[email protected]?subject=help> > -List-Subscribe: <https://lists.ozlabs.org/listinfo/linuxppc-dev>, > - <mailto:[email protected]?subject=subscribe> > -Content-Type: text/plain; > - charset="us-ascii" > -Content-Transfer-Encoding: 7bit > -Sender: [email protected] > -Errors-To: [email protected] > -X-UID: 11446 > -X-Length: 16781 > -Status: R > -X-Status: N > -X-KMail-EncryptionState: > -X-KMail-SignatureState: > -X-KMail-MDN-Sent: > - > -Hi Linus ! > - > -Here's powerpc's batch for this merge window. Mostly bits and pieces, > -such as Anton doing some performance tuning left and right, and the > -usual churn. One hilight is the support for the new Freescale e5500 core > -(64-bit BookE). Another one is that we now wire up the whole lot of > -socket calls as direct syscalls in addition to the old style indirect > -method. > - > -Cheers, > -Ben. > - > -The following changes since commit e10117d36ef758da0690c95ecffc09d5dd7da479: > - Linus Torvalds (1): > - Merge branch 'upstream-linus' of > git://git.kernel.org/.../jgarzik/libata-dev > - > -are available in the git repository at: > - > - git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git next > - > -Andreas Schwab (1): > - powerpc: Remove fpscr use from [kvm_]cvt_{fd,df} > - > -Anton Blanchard (5): > - powerpc: Optimise 64bit csum_partial > - powerpc: Optimise 64bit csum_partial_copy_generic and add > csum_and_copy_from_user > - powerpc: Add 64bit csum_and_copy_to_user > - powerpc: Feature nop out reservation clear when stcx checks address > - powerpc: Check end of stack canary at oops time > - > -Arnd Bergmann (1): > - powerpc/spufs: Use llseek in all file operations > - > -Benjamin Herrenschmidt (4): > - powerpc/dma: Add optional platform override of dma_set_mask() > - powerpc/dart_iommu: Support for 64-bit iommu bypass window on PCIe > - Merge remote branch 'kumar/merge' into next > - Merge remote branch 'jwb/next' into next > - > -Denis Kirjanov (1): > - powerpc: Use is_32bit_task() helper to test 32-bit binary > - > -Harninder Rai (1): > - powerpc/85xx: add cache-sram support > - > -Ian Munsie (1): > - powerpc: Wire up direct socket system calls > - > -Ilya Yanok (1): > - powerpc/mpc83xx: Support for MPC8308 P1M board > - > -Joe Perches (2): > - powerpc: Use static const char arrays > - powerpc: Remove pr_<level> uses of KERN_<level> > - > -Josh Boyer (1): > - powerpc/44x: Update ppc44x_defconfig > - > -Julia Lawall (7): > - powerpc/via-pmu-led.c: Add of_node_put to avoid memory leak > - powerpc/maple: Add of_node_put to avoid memory leak > - powerpc/powermac/pfunc_core.c: Add of_node_put to avoid memory leak > - powerpc/cell: Add of_node_put to avoid memory leak > - powerpc/chrp/nvram.c: Add of_node_put to avoid memory leak > - powerpc/irq.c: Add of_node_put to avoid memory leak > - i2c/i2c-pasemi.c: Fix unsigned return type > - > -Kumar Gala (11): > - powerpc/ppc64e: Fix link problem when building ppc64e_defconfig > - powerpc/fsl-pci: Fix MSI support on 83xx platforms > - powerpc/mpc8xxx_gpio: Add support for 'qoriq-gpio' controllers > - powerpc/fsl-booke: Add PCI device ids for P2040/P3041/P5010/P5020 > QoirQ chips > - powerpc/fsl-booke: Add p3041 DS board support > - powerpc: Fix compile error with paca code on ppc64e > - powerpc/fsl-booke: Add support for FSL 64-bit e5500 core > - powerpc/fsl-booke: Add support for FSL Arch v1.0 MMU in > setup_page_sizes > - powerpc/fsl-booke64: Use TLB CAMs to cover linear mapping on FSL > 64-bit chips > - powerpc/fsl-booke: Add p5020 DS board support > - powerpc/fsl-booke: Add e55xx (64-bit) smp defconfig > - > -Matthew McClintock (7): > - powerpc/mm: Assume first cpu is boot_cpuid not 0 > - powerpc/kexec: make masking/disabling interrupts generic > - powerpc/85xx: Remove call to mpic_teardown_this_cpu in kexec > - powerpc/85xx: Minor fixups for kexec on 85xx > - powerpc/85xx: flush dcache before resetting cores > - powerpc/fsl_soc: Search all global-utilities nodes for rstccr > - powerpc/fsl_booke: Add support to boot from core other than 0 > - > -Michael Neuling (1): > - powerpc: Move arch_sd_sibling_asym_packing() to smp.c > - > -Nathan Fontenot (3): > - powerpc/pseries: Export device tree updating routines > - powerpc/pseries: Export rtas_ibm_suspend_me() > - powerpc/pseries: Partition migration in the kernel > - > -Nishanth Aravamudan (8): > - powerpc/pci: Fix return type of BUID_{HI,LO} macros > - powerpc/dma: Fix dma_iommu_dma_supported compare > - powerpc/dma: Fix check for direct DMA support > - powerpc/vio: Use put_device() on device_register failure > - powerpc/viobus: Free TCE table on device release > - powerpc/pseries: Use kmemdup > - powerpc/pci: Cleanup device dma setup code > - powerpc/pseries/xics: Use cpu_possible_mask rather than cpu_all_mask > - > -Paul Gortmaker (1): > - powerpc: Fix invalid page flags in create TLB CAM path for PTE_64BIT > - > -Paul Mackerras (5): > - powerpc: Abstract indexing of lppaca structs > - powerpc: Dynamically allocate most lppaca structs > - powerpc: Account time using timebase rather than PURR > - powerpc/pseries: Re-enable dispatch trace log userspace interface > - powerpc/perf: Fix sampling enable for PPC970 > - > -Scott Wood (1): > - oprofile/fsl emb: Don't set MSR[PMM] until after clearing the > interrupt. > - > -Sean MacLennan (2): > - powerpc: Fix incorrect .stabs entry for copy_32.S > - powerpc: mtmsrd not defined > - > -Shaohui Xie (1): > - fsl_rio: Add comments for sRIO registers. > - > -Stephen Rothwell (1): > - powerpc: define a compat_sys_recv cond_syscall > - > -Timur Tabi (5): > - powerpc: export ppc_proc_freq and ppc_tb_freq as GPL symbols > - powerpc/watchdog: Allow the Book-E driver to be compiled as a module > - powerpc/p1022: Add probing for individual DMA channels > - powerpc/85xx: add ngPIXIS FPGA device tree node to the P1022DS board > - powerpc/watchdog: Make default timeout for Book-E watchdog a Kconfig > option > - > -Tirumala Marri (1): > - powerpc/44x: Add support for the AMCC APM821xx SoC > - > -matt mooney (1): > - powerpc/Makefiles: Change to new flag variables > - > - arch/powerpc/boot/addnote.c | 4 +- > - arch/powerpc/boot/dts/bluestone.dts | 254 +++++++++++++ > - arch/powerpc/boot/dts/mpc8308_p1m.dts | 332 ++++++++++++++++ > - arch/powerpc/boot/dts/p1022ds.dts | 11 + > - arch/powerpc/configs/44x/bluestone_defconfig | 68 ++++ > - arch/powerpc/configs/e55xx_smp_defconfig | 84 ++++ > - arch/powerpc/configs/ppc44x_defconfig | 9 +- > - arch/powerpc/configs/ppc64e_defconfig | 4 +- > - arch/powerpc/include/asm/checksum.h | 10 + > - arch/powerpc/include/asm/compat.h | 4 +- > - arch/powerpc/include/asm/cputable.h | 14 +- > - arch/powerpc/include/asm/dma-mapping.h | 14 +- > - arch/powerpc/include/asm/elf.h | 2 +- > - arch/powerpc/include/asm/exception-64s.h | 3 +- > - arch/powerpc/include/asm/fsl_85xx_cache_sram.h | 48 +++ > - arch/powerpc/include/asm/kexec.h | 1 + > - arch/powerpc/include/asm/kvm_fpu.h | 4 +- > - arch/powerpc/include/asm/lppaca.h | 29 ++ > - arch/powerpc/include/asm/machdep.h | 3 + > - arch/powerpc/include/asm/mmu-book3e.h | 15 + > - arch/powerpc/include/asm/paca.h | 10 +- > - arch/powerpc/include/asm/page_64.h | 4 +- > - arch/powerpc/include/asm/ppc-pci.h | 4 +- > - arch/powerpc/include/asm/ppc_asm.h | 50 ++- > - arch/powerpc/include/asm/processor.h | 4 +- > - arch/powerpc/include/asm/pte-common.h | 7 + > - arch/powerpc/include/asm/rtas.h | 1 + > - arch/powerpc/include/asm/systbl.h | 19 + > - arch/powerpc/include/asm/system.h | 4 +- > - arch/powerpc/include/asm/time.h | 5 - > - arch/powerpc/include/asm/unistd.h | 21 +- > - arch/powerpc/kernel/Makefile | 4 +- > - arch/powerpc/kernel/align.c | 4 +- > - arch/powerpc/kernel/asm-offsets.c | 12 +- > - arch/powerpc/kernel/cpu_setup_44x.S | 1 + > - arch/powerpc/kernel/cpu_setup_fsl_booke.S | 15 + > - arch/powerpc/kernel/cputable.c | 43 ++- > - arch/powerpc/kernel/crash.c | 13 +- > - arch/powerpc/kernel/dma-iommu.c | 21 +- > - arch/powerpc/kernel/dma.c | 20 +- > - arch/powerpc/kernel/entry_64.S | 40 ++ > - arch/powerpc/kernel/fpu.S | 10 - > - arch/powerpc/kernel/head_fsl_booke.S | 10 +- > - arch/powerpc/kernel/irq.c | 6 +- > - arch/powerpc/kernel/lparcfg.c | 14 +- > - arch/powerpc/kernel/machine_kexec.c | 24 ++ > - arch/powerpc/kernel/machine_kexec_32.c | 4 + > - arch/powerpc/kernel/paca.c | 70 ++++- > - arch/powerpc/kernel/pci-common.c | 4 +- > - arch/powerpc/kernel/ppc970-pmu.c | 2 + > - arch/powerpc/kernel/process.c | 12 - > - arch/powerpc/kernel/ptrace.c | 2 +- > - arch/powerpc/kernel/rtas.c | 4 +- > - arch/powerpc/kernel/setup_32.c | 2 +- > - arch/powerpc/kernel/smp.c | 14 +- > - arch/powerpc/kernel/time.c | 275 +++++++------- > - arch/powerpc/kernel/traps.c | 5 + > - arch/powerpc/kernel/vdso.c | 6 +- > - arch/powerpc/kernel/vdso32/Makefile | 6 +- > - arch/powerpc/kernel/vdso64/Makefile | 6 +- > - arch/powerpc/kernel/vio.c | 10 +- > - arch/powerpc/kvm/Makefile | 2 +- > - arch/powerpc/kvm/book3s_paired_singles.c | 44 +-- > - arch/powerpc/kvm/emulate.c | 4 +- > - arch/powerpc/kvm/fpu.S | 8 - > - arch/powerpc/lib/Makefile | 7 +- > - arch/powerpc/lib/checksum_64.S | 482 > +++++++++++++++++------- > - arch/powerpc/lib/checksum_wrappers_64.c | 102 +++++ > - arch/powerpc/lib/copy_32.S | 2 +- > - arch/powerpc/lib/ldstfp.S | 36 +- > - arch/powerpc/lib/locks.c | 4 +- > - arch/powerpc/lib/sstep.c | 8 + > - arch/powerpc/math-emu/Makefile | 2 +- > - arch/powerpc/mm/Makefile | 6 +- > - arch/powerpc/mm/fault.c | 6 + > - arch/powerpc/mm/fsl_booke_mmu.c | 15 +- > - arch/powerpc/mm/mmu_context_nohash.c | 6 +- > - arch/powerpc/mm/mmu_decl.h | 5 +- > - arch/powerpc/mm/tlb_nohash.c | 56 +++- > - arch/powerpc/mm/tlb_nohash_low.S | 2 +- > - arch/powerpc/oprofile/Makefile | 4 +- > - arch/powerpc/oprofile/backtrace.c | 2 +- > - arch/powerpc/oprofile/op_model_fsl_emb.c | 15 +- > - arch/powerpc/platforms/44x/Kconfig | 16 + > - arch/powerpc/platforms/44x/ppc44x_simple.c | 1 + > - arch/powerpc/platforms/83xx/Kconfig | 4 +- > - arch/powerpc/platforms/83xx/mpc830x_rdb.c | 3 +- > - arch/powerpc/platforms/85xx/Kconfig | 28 ++- > - arch/powerpc/platforms/85xx/Makefile | 2 + > - arch/powerpc/platforms/85xx/p1022_ds.c | 2 + > - arch/powerpc/platforms/85xx/p3041_ds.c | 64 ++++ > - arch/powerpc/platforms/85xx/p5020_ds.c | 69 ++++ > - arch/powerpc/platforms/85xx/smp.c | 83 ++++- > - arch/powerpc/platforms/Kconfig.cputype | 8 +- > - arch/powerpc/platforms/cell/ras.c | 4 +- > - arch/powerpc/platforms/cell/spider-pic.c | 4 +- > - arch/powerpc/platforms/cell/spufs/file.c | 18 + > - arch/powerpc/platforms/chrp/nvram.c | 4 +- > - arch/powerpc/platforms/iseries/Makefile | 2 +- > - arch/powerpc/platforms/iseries/dt.c | 4 +- > - arch/powerpc/platforms/iseries/smp.c | 2 +- > - arch/powerpc/platforms/maple/setup.c | 1 + > - arch/powerpc/platforms/powermac/pfunc_core.c | 9 +- > - arch/powerpc/platforms/pseries/Makefile | 13 +- > - arch/powerpc/platforms/pseries/dlpar.c | 7 +- > - arch/powerpc/platforms/pseries/dtl.c | 224 +++++++++--- > - arch/powerpc/platforms/pseries/lpar.c | 25 ++- > - arch/powerpc/platforms/pseries/mobility.c | 362 ++++++++++++++++++ > - arch/powerpc/platforms/pseries/pseries.h | 9 + > - arch/powerpc/platforms/pseries/setup.c | 52 +++ > - arch/powerpc/platforms/pseries/xics.c | 2 +- > - arch/powerpc/sysdev/Makefile | 5 +- > - arch/powerpc/sysdev/dart_iommu.c | 74 ++++- > - arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h | 101 +++++ > - arch/powerpc/sysdev/fsl_85xx_cache_sram.c | 159 ++++++++ > - arch/powerpc/sysdev/fsl_85xx_l2ctlr.c | 231 +++++++++++ > - arch/powerpc/sysdev/fsl_msi.c | 9 +- > - arch/powerpc/sysdev/fsl_pci.c | 60 +++- > - arch/powerpc/sysdev/fsl_pci.h | 1 + > - arch/powerpc/sysdev/fsl_rio.c | 65 ++-- > - arch/powerpc/sysdev/fsl_soc.c | 20 +- > - arch/powerpc/sysdev/mpc8xxx_gpio.c | 3 + > - arch/powerpc/sysdev/pmi.c | 2 +- > - arch/powerpc/xmon/Makefile | 4 +- > - drivers/i2c/busses/i2c-pasemi.c | 2 +- > - drivers/macintosh/via-pmu-led.c | 4 +- > - drivers/watchdog/Kconfig | 22 +- > - drivers/watchdog/booke_wdt.c | 47 ++- > - include/linux/pci_ids.h | 8 + > - kernel/sys_ni.c | 1 + > - 130 files changed, 3676 insertions(+), 683 deletions(-) > - create mode 100644 arch/powerpc/boot/dts/bluestone.dts > - create mode 100644 arch/powerpc/boot/dts/mpc8308_p1m.dts > - create mode 100644 arch/powerpc/configs/44x/bluestone_defconfig > - create mode 100644 arch/powerpc/configs/e55xx_smp_defconfig > - create mode 100644 arch/powerpc/include/asm/fsl_85xx_cache_sram.h > - create mode 100644 arch/powerpc/lib/checksum_wrappers_64.c > - create mode 100644 arch/powerpc/platforms/85xx/p3041_ds.c > - create mode 100644 arch/powerpc/platforms/85xx/p5020_ds.c > - create mode 100644 arch/powerpc/platforms/pseries/mobility.c > - create mode 100644 arch/powerpc/sysdev/fsl_85xx_cache_ctlr.h > - create mode 100644 arch/powerpc/sysdev/fsl_85xx_cache_sram.c > - create mode 100644 arch/powerpc/sysdev/fsl_85xx_l2ctlr.c > - > - > -_______________________________________________ > -Linuxppc-dev mailing list > [email protected] > -https://lists.ozlabs.org/listinfo/linuxppc-dev > diff --git patchwork/tests/test_bundles.py patchwork/tests/test_bundles.py > index e904b11c80a8..63f943c033d6 100644 > --- patchwork/tests/test_bundles.py > +++ patchwork/tests/test_bundles.py > @@ -11,9 +11,6 @@ from django.conf import settings > from django.test import TestCase > from django.urls import reverse > from django.utils.http import urlencode > -from django.utils import six > -from django.utils.six.moves import range > -from django.utils.six.moves import zip > > from patchwork.models import Bundle > from patchwork.models import BundlePatch > @@ -117,14 +114,14 @@ class BundleMboxTest(BundleTestBase): > def test_empty_bundle(self): > response = self.client.get(bundle_mbox_url(self.bundle)) > self.assertEqual(response.status_code, 200) > - self.assertEqual(response.content, six.b('')) > + self.assertEqual(response.content, b'') > > def test_non_empty_bundle(self): > self.bundle.append_patch(self.patches[0]) > > response = self.client.get(bundle_mbox_url(self.bundle)) > self.assertEqual(response.status_code, 200) > - self.assertNotEqual(response.content, six.b('')) > + self.assertNotEqual(response.content, b'') > > > class BundleUpdateTest(BundleTestBase): > diff --git patchwork/tests/test_completion.py > patchwork/tests/test_completion.py > index ebcac669a2ee..1b1a18dfc5ec 100644 > --- patchwork/tests/test_completion.py > +++ patchwork/tests/test_completion.py > @@ -7,7 +7,6 @@ import json > > from django.test import TestCase > from django.urls import reverse > -from django.utils.six.moves import range > > from patchwork.tests.utils import create_person > > diff --git patchwork/tests/test_list.py patchwork/tests/test_list.py > index 1c0503fa693b..4466fa3592a9 100644 > --- patchwork/tests/test_list.py > +++ patchwork/tests/test_list.py > @@ -8,7 +8,6 @@ import re > > from django.test import TestCase > from django.urls import reverse > -from django.utils.six.moves import zip > > from patchwork.models import Patch > from patchwork.tests.utils import create_patch > diff --git patchwork/tests/test_management.py > patchwork/tests/test_management.py > index 84a3839d94c9..66c6bad643a4 100644 > --- patchwork/tests/test_management.py > +++ patchwork/tests/test_management.py > @@ -5,9 +5,9 @@ > > import os > import sys > +from io import StringIO > > from django.core.management import call_command > -from django.utils.six import StringIO > from django.test import TestCase > > from patchwork import models > diff --git patchwork/tests/test_parser.py patchwork/tests/test_parser.py > index 85c6c52f0e4b..29a5c8b48b8c 100644 > --- patchwork/tests/test_parser.py > +++ patchwork/tests/test_parser.py > @@ -9,12 +9,9 @@ from email.mime.multipart import MIMEMultipart > from email.mime.text import MIMEText > from email.utils import make_msgid > import os > -import sys > -import unittest > > from django.test import TestCase > from django.test import TransactionTestCase > -from django.utils import six > > from patchwork.models import Comment > from patchwork.models import Patch > @@ -44,12 +41,8 @@ from patchwork.tests.utils import SAMPLE_DIFF > > > def load_mail(file_path): > - if six.PY3: > - with open(file_path, 'rb') as f: > - mail = email.message_from_binary_file(f) > - else: > - with open(file_path) as f: > - mail = email.message_from_file(f) > + with open(file_path, 'rb') as f: > + mail = email.message_from_binary_file(f) > return mail > > > @@ -586,19 +579,6 @@ class PatchParseTest(PatchTest): > def test_git_pull_request(self): > self._test_pull_request_parse('0001-git-pull-request.mbox') > > - @unittest.skipIf(six.PY3, 'Breaks only on Python 2') > - def test_git_pull_request_crlf_newlines(self): > - # verify that we haven't munged the file > - crlf_file = os.path.join(TEST_MAIL_DIR, > - '0018-git-pull-request-crlf-newlines.mbox') > - with open(crlf_file) as f: > - message = f.read() > - self.assertIn('\r\n', message) > - > - # verify the file works > - self._test_pull_request_parse( > - '0018-git-pull-request-crlf-newlines.mbox') > - > def test_git_pull_wrapped_request(self): > self._test_pull_request_parse('0002-git-pull-request-wrapped.mbox') > > @@ -1044,6 +1024,7 @@ class WeirdMailTest(TransactionTestCase): > > @unittest.skipUnless((3, 0) <= sys.version_info < (3, 7), > 'Breaks only on Python 3.0 - 3.6') > + > def test_early_fail(self): > file_path = os.path.join(TEST_FUZZ_DIR, 'earlyfail.mbox') > with self.assertRaises(AttributeError): > diff --git patchwork/views/utils.py patchwork/views/utils.py > index 905807935459..4419702ee8c0 100644 > --- patchwork/views/utils.py > +++ patchwork/views/utils.py > @@ -14,7 +14,6 @@ import re > > from django.conf import settings > from django.http import Http404 > -from django.utils import six > > from patchwork.models import Comment > from patchwork.models import Patch > @@ -110,10 +109,7 @@ def _submission_to_mbox(submission): > mail['Date'] = email.utils.formatdate(utc_timestamp) > > # NOTE(stephenfin) http://stackoverflow.com/a/28584090/613428 > - if six.PY3: > - mail = mail.as_bytes(True).decode() > - else: > - mail = mail.as_string(True) > + mail = mail.as_bytes(True).decode() > > return mail > > diff --git requirements-dev.txt requirements-dev.txt > index 60eb8a630719..5f8803ef1b82 100644 > --- requirements-dev.txt > +++ requirements-dev.txt > @@ -1,10 +1,6 @@ > -Django~=2.2.0; python_version >= '3.5' > -Django~=1.11.0; python_version < '3.0' # pyup: ignore > -djangorestframework~=3.10.0; python_version >= '3.5' > -djangorestframework~=3.9.0; python_version < '3.0' # pyup: ignore > -django-filter~=2.2.0; python_version >= '3.5' > -django-filter~=1.1.0; python_version < '3.0' # pyup: ignore > -django-debug-toolbar~=2.0.0; python_version >= '3.5' # pyup: ignore > -django-debug-toolbar~=1.11.0; python_version < '3.0' # pyup: ignore > +Django~=2.2.0 > +djangorestframework~=3.10.0 > +django-filter~=2.2.0 > +django-debug-toolbar~=2.0.0 # pyup: ignore > django-dbbackup~=3.2.0 > -r requirements-test.txt > diff --git requirements-prod.txt requirements-prod.txt > index 797d30bbb2e5..98030ff1b7cd 100644 > --- requirements-prod.txt > +++ requirements-prod.txt > @@ -1,8 +1,5 @@ > -Django~=2.2.0; python_version >= '3.5' > -Django~=1.11.0; python_version < '3.0' # pyup: ignore > -djangorestframework~=3.10.0; python_version >= '3.5' > -djangorestframework~=3.9.0; python_version < '3.0' # pyup: ignore > -django-filter~=2.2.0; python_version >= '3.5' > -django-filter~=1.1.0; python_version < '3.0' # pyup: ignore > +Django~=2.2.0 > +djangorestframework~=3.10.0 > +django-filter~=2.2.0 > psycopg2-binary~=2.8.0 > sqlparse~=0.3.0 > diff --git tox.ini tox.ini > index 617e73cdbee6..32caa866431f 100644 > --- tox.ini > +++ tox.ini > @@ -1,16 +1,11 @@ > [tox] > minversion = 2.0 > -envlist = pep8,docs,py27-django111,py{35,36,37}-django{111,20,21,22} > +envlist = pep8,docs,py{36,37}-django{20,21,22} > skipsdist = True > > [testenv] > deps = > -r{toxinidir}/requirements-test.txt > - django111: django>=1.11,<2.0 > - django111: djangorestframework>=3.6,<3.11; python_version >= '3.5' > - django111: djangorestframework>=3.6,<3.10; python_version < '3.0' > - django111: django-filter>=1.0,<3.0; python_version >= '3.5' > - django111: django-filter>=1.0,<2.0; python_version < '3.0' > django20: django>=2.0,<2.1 > django21: django>=2.1,<2.2 > django{20,21}: djangorestframework>=3.7,<3.11 > @@ -22,9 +17,7 @@ setenv = > DJANGO_SETTINGS_MODULE = patchwork.settings.dev > PYTHONDONTWRITEBYTECODE = 1 > DJANGO_LIVE_TEST_SERVER_ADDRESS = localhost:9000-9200 > - py27: PYTHONWARNINGS = once > - py{34,36}:PYTHONWARNINGS = once,ignore::ImportWarning:backports > - py35:PYTHONWARNINGS = > once,ignore::ResourceWarning:unittest.suite,ignore::ImportWarning:backports > + py36:PYTHONWARNINGS = once,ignore::ImportWarning:backports > passenv = > http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY > PW_TEST_DB_TYPE PW_TEST_DB_USER PW_TEST_DB_PASS PW_TEST_DB_HOST > @@ -42,7 +35,7 @@ commands = > -name \*.sh -print | xargs bashate -i E006" > > [testenv:pep8] > -basepython = python2.7 > +basepython = python3.6 > deps = flake8 > commands = flake8 {posargs:patchwork manage.py} > > @@ -62,7 +55,7 @@ commands = > sphinx-build -E -W -b dirhtml -d docs/_build/doctrees docs > docs/_build/html > > [testenv:lint] > -basepython = python2.7 > +basepython = python3.6 > deps = > pylint > -r{toxinidir}/requirements-prod.txt > @@ -72,7 +65,7 @@ commands = pylint patchwork --rcfile=pylint.rc > commands = {posargs} > > [testenv:coverage] > -basepython = python2.7 > +basepython = python3.6 > deps = > coverage > -r{toxinidir}/requirements-dev.txt > @@ -86,4 +79,4 @@ commands = > > [travis] > python = > - 2.7: py27, pep8 > + 3.6: py36, pep8 > -- > 2.20.1 _______________________________________________ Patchwork mailing list [email protected] https://lists.ozlabs.org/listinfo/patchwork
