]> git.ipfire.org Git - thirdparty/patchwork.git/log
thirdparty/patchwork.git
8 years agoRemove 'htdocs/images' 58/head
Bruno Mendes [Mon, 31 Oct 2016 13:16:34 +0000 (11:16 -0200)] 
Remove 'htdocs/images'

8 years agoviews: Update how patch counts are retrieved
Stephen Finucane [Sat, 22 Oct 2016 11:23:27 +0000 (12:23 +0100)] 
views: Update how patch counts are retrieved

It's no longer possible to access 'Project.patch_set' as
'Project.submission_set' has replaced it. This was missed when the
cover letter feature was merged, so resolve it now.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
Closes-bug: #54

8 years agodocs: Add getmail documentation
Stephen Finucane [Thu, 20 Oct 2016 07:08:39 +0000 (08:08 +0100)] 
docs: Add getmail documentation

It seems a lot of people are having success using tools like fetchmail
in combination with IMAP/POP-capable email accounts like Gmail.  While
fetchmail itself is rather decrepit, the Python-based getmail seems
actively supported and pretty easy to configure. Document this process.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agomodels: Remove TODO from 'refresh_tag_counts'
Stephen Finucane [Thu, 20 Oct 2016 07:28:56 +0000 (08:28 +0100)] 
models: Remove TODO from 'refresh_tag_counts'

There's actually no harm keeping this around as it makes the code.
Remove the TODO, replacing it with a note on why the function exists.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agomodels: Remove UserProfile.sync_person
Stephen Finucane [Thu, 20 Oct 2016 07:28:55 +0000 (08:28 +0100)] 
models: Remove UserProfile.sync_person

This doesn't seem to do anything, and hasn't for a very long time
(pre-0.9.0, at least).

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agomodels: Remove Bundle.n_patches
Stephen Finucane [Thu, 20 Oct 2016 07:28:54 +0000 (08:28 +0100)] 
models: Remove Bundle.n_patches

It doesn't really do much for us. Less LOC = win.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agomodels: Make use of aggregates
Stephen Finucane [Thu, 20 Oct 2016 07:28:53 +0000 (08:28 +0100)] 
models: Make use of aggregates

We're well past Django 1.1 now, so resolve a TODO to use aggregate
support introduced in this version. As part of this change, replace
the use of 'count' to check for presence of matching objects with
'exists'.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Fix pep8 issue
Stephen Finucane [Thu, 20 Oct 2016 07:45:38 +0000 (08:45 +0100)] 
trivial: Fix pep8 issue

There should be two lines - not one.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agodocs: Add delegation guide
Stephen Finucane [Tue, 11 Oct 2016 17:58:38 +0000 (18:58 +0100)] 
docs: Add delegation guide

We do autodelegation - let's tell people all about it.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agodocs: Add X-Patchwork-* header documentation
Stephen Finucane [Tue, 11 Oct 2016 17:15:32 +0000 (18:15 +0100)] 
docs: Add X-Patchwork-* header documentation

Avoids sending people to the code to find out about this stuff. Include
examples using 'git-send-email', which should cover most folks.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agodocs: Add basic REST API documentation
Stephen Finucane [Tue, 11 Oct 2016 17:14:43 +0000 (18:14 +0100)] 
docs: Add basic REST API documentation

This is only user-facing for now. Developer focused docs can be added
later.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agodocs: Rework XML-RPC docs
Stephen Finucane [Tue, 11 Oct 2016 17:14:36 +0000 (18:14 +0100)] 
docs: Rework XML-RPC docs

Add a barebones usage guide for pwclient and simplify the existing doc
for this API. This entails move the existing doc from the deployment
section to development section, which makes more sense given its focus.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agodocs: Structure docs folder like online
Stephen Finucane [Tue, 11 Oct 2016 17:13:11 +0000 (18:13 +0100)] 
docs: Structure docs folder like online

The XML-RPC doc is renamed accordingly.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoREADME: Add missing '**'
Stephen Finucane [Mon, 10 Oct 2016 23:04:01 +0000 (00:04 +0100)] 
README: Add missing '**'

Must test docs before publising.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agomodels: Remove 'UserProfile.primary_project'
Stephen Finucane [Sun, 9 Oct 2016 22:35:48 +0000 (23:35 +0100)] 
models: Remove 'UserProfile.primary_project'

This field was unused and has been for a long time (pre-0.9.0).

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
8 years agotravis: Enable *-django110 targets
Stephen Finucane [Sun, 9 Oct 2016 19:07:25 +0000 (20:07 +0100)] 
travis: Enable *-django110 targets

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agorequirements: Add support for Django 1.10
Stephen Finucane [Sun, 9 Oct 2016 19:07:23 +0000 (20:07 +0100)] 
requirements: Add support for Django 1.10

All issues around 1.10 support have been resolved. Add tox targets
and extend the range of supported versions to include this release.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agoviews: Resolve select_related issues
Stephen Finucane [Sun, 9 Oct 2016 19:07:21 +0000 (20:07 +0100)] 
views: Resolve select_related issues

Django 1.10 prohibits non-relational fields for nested relations [1].
Replace said call with a functional alternative.

[1] https://docs.djangoproject.com/en/dev/releases/1.10/#select-related-prohibits-non-relational-fields-for-nested-relations

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotemplates: Resolve cycle issues with Django 1.10
Stephen Finucane [Sun, 9 Oct 2016 19:07:18 +0000 (20:07 +0100)] 
templates: Resolve cycle issues with Django 1.10

The 'future.cycle' template tag is removed in Django 1.10. Since
Django 1.7 is still supported by Patchwork, it is necessary to
provide a custom 'cycle' wrapper to prevent the deprecation
warnings resolved by '9cab078' being reintroduced.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agorequirements: Bump django-rest-framework to 1.4.x
Stephen Finucane [Sun, 9 Oct 2016 19:07:16 +0000 (20:07 +0100)] 
requirements: Bump django-rest-framework to 1.4.x

This version is compatible with all versions of Django that Patchwork
is recommended for.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agoRevert "Allow assigning of any user as delegate"
Stephen Finucane [Sun, 25 Sep 2016 21:37:11 +0000 (22:37 +0100)] 
Revert "Allow assigning of any user as delegate"

This reverts commit e0fd7cd91a5fbe0a0077c46bea870ccd09c8920d.

This change does not scale with a larger number of lists, and clearly
needs more work. Revert until such a time as this is carried out.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoparsearchive: Don't catch standard exceptions
Stephen Finucane [Sat, 8 Oct 2016 17:11:24 +0000 (18:11 +0100)] 
parsearchive: Don't catch standard exceptions

It's too broad. The exception that was intended to be caught should be
converted to a more specific exception instead.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoREADME: Add 'stone-tools' presentation
Stephen Finucane [Sat, 8 Oct 2016 13:12:44 +0000 (14:12 +0100)] 
README: Add 'stone-tools' presentation

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoparsearchive: Handle broken patches
Stephen Finucane [Fri, 7 Oct 2016 18:50:46 +0000 (19:50 +0100)] 
parsearchive: Handle broken patches

Some emails are malformed and missing required fields, e.g. subject.
Keep a counter of all broken mails we receive.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoparsearchive: Convert to a management command
Stephen Finucane [Wed, 7 Sep 2016 21:16:43 +0000 (22:16 +0100)] 
parsearchive: Convert to a management command

As with parsemail, parsearchive makes more sense as a management
command. Make it so.

As with the conversion of the 'parsemail' tool, this removes
customisable logging as it's not necessary.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Closes-bug: #17

8 years agoparsemail: Convert to a management command
Daniel Axtens [Thu, 22 Sep 2016 02:15:09 +0000 (12:15 +1000)] 
parsemail: Convert to a management command

Management comands allow applications to register their own actions
with 'manage.py'. This provides some advantages, like automatically
configuring Django (removing the need for 'django.setup' calls) and
removing the need to set the PYTHON_PATH. The 'parsemail' script is a
natural fit for this type of application. Migrate 'parsemail' to a
management command.

This includes some extensive work on logging configuration, as logging
is moved from code into settings. In addition, it removes a lot of the
customizable logging previously introduced in the parsemail command, in
favour of modifications to the settings files.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stephen Finucane <stephen@that.guru>
Partial-bug: #17
Closes-bug: #15

8 years agotests: Reduce duplication in MailParsingTest
Stephen Finucane [Fri, 7 Oct 2016 18:21:19 +0000 (19:21 +0100)] 
tests: Reduce duplication in MailParsingTest

...and rename to 'EncodingParseTest' to signify function of tests.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoparser tests: test parsing of interesting mail
Daniel Axtens [Tue, 20 Sep 2016 08:29:06 +0000 (18:29 +1000)] 
parser tests: test parsing of interesting mail

We have 4 new tests:
 - One with a header with a character that is neither 7-bit ASCII
   nor UTF-8.
 - One with UTF-8 in the body.
 - One with un-encoded UTF-8 in the headers.
 - One with a header that claims to be UTF-8 but isn't.

This also requires us to change how we open files on Python 3. Use
the binary file and message_from_binary_file setup under Python 3.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephen@that.guru>
8 years agoparser: subject_check needs to call clean_header
Daniel Axtens [Wed, 28 Sep 2016 04:06:07 +0000 (14:06 +1000)] 
parser: subject_check needs to call clean_header

When testing with headers with unencoded characters on Py3,
subject_check would fail. It was getting an Header class, rather
than a str/bytes, and so the regex was failing.

Run clean_header to decode everything fully first.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephen@that.guru>
8 years agoparser: parse headers containing invalid characters or codings
Daniel Axtens [Mon, 19 Sep 2016 14:23:58 +0000 (00:23 +1000)] 
parser: parse headers containing invalid characters or codings

If there is a non-ascii character in a header, parsing fails,
even on Py27.

This has huge Py2/Py3 complexities. The Py3 email package has tools
to handle this - we just need to use them. Py2, on the other hand,
needs a lot of hand-holding, as explained in the comments.

Additionally, support headers that claim an encoding, but fail to
decode with that encoding.

This is handy for mails with malformed headers containing weird
bytes.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reported-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Reviewed-by: Stephen Finucane <stephen@that.guru>
8 years agoparsemail-batch: Replace tabs with spaces
Stephen Finucane [Fri, 7 Oct 2016 17:58:03 +0000 (18:58 +0100)] 
parsemail-batch: Replace tabs with spaces

Let's keep our Bash scripts consistent with our Python.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoparsemail-batch.sh: pass command-line options to parsemail
Daniel Axtens [Fri, 2 Sep 2016 01:40:04 +0000 (11:40 +1000)] 
parsemail-batch.sh: pass command-line options to parsemail

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephen@that.guru>
8 years agoparsemail.sh: make testing easier
Daniel Axtens [Tue, 20 Sep 2016 06:43:24 +0000 (16:43 +1000)] 
parsemail.sh: make testing easier

 - Take PW_PYTHON, allowing the python version to be set
 - Only override DJANGO_SETTINGS_MODULE if it's not in the env
 - Pass parameters to parsemail.py

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agoui: Shrink vertical space
Thomas Monjalon [Thu, 8 Sep 2016 21:20:32 +0000 (23:20 +0200)] 
ui: Shrink vertical space

Reduce some vertical padding/margin and remove some useless titles
in list.html and patch.html.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Reviewed-by: Stephen Finucane <stephen@that.guru>
8 years agoui: Align patch form with above metadata
Thomas Monjalon [Thu, 8 Sep 2016 21:20:31 +0000 (23:20 +0200)] 
ui: Align patch form with above metadata

The box "Patch Properties" is now well aligned with lines
"Message ID", "State" and "Headers".

Give also more space with side box "Bundling".

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Reviewed-by: Stephen Finucane <stephen@that.guru>
8 years agoui: Align patch row with checkbox vertically
Thomas Monjalon [Thu, 8 Sep 2016 21:20:30 +0000 (23:20 +0200)] 
ui: Align patch row with checkbox vertically

When logged in, the checkbox in front of each row makes the line bigger.
And the text was not exactly in the middle of the line.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Reviewed-by: Stephen Finucane <stephen@that.guru>
8 years agoUpdate mailmap with new email
Stephen Finucane [Sun, 25 Sep 2016 21:00:47 +0000 (22:00 +0100)] 
Update mailmap with new email

Hotmail is unfortunately not standards compliant and has a bad habit of
rewriting message-ids. This breaks threading for both Mailman and
Patchwork. Clearly it's time to switch to another email address.

Signed-off-by: Stephen Finucane <stephen@that.guru>
8 years agobin/pwclient: fix spurious except catch
Yann E. MORIN [Sun, 25 Sep 2016 10:48:32 +0000 (12:48 +0200)] 
bin/pwclient: fix spurious except catch

The 'with' statement does not start an exception block like 'try' would,
so we get an error executing pwclient:

      File "/home/ymorin/bin/pwclient", line 300
        except IOError:
             ^
    SyntaxError: invalid syntax

Instead, don't try to catch any exception: any failure will be
propagated back up the stack and eventually cause an abort, which is
anyway what the except clause was trying to do.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agoparser: fix wrong parsing of diff comments
WEN Pingbo [Mon, 5 Sep 2016 14:31:46 +0000 (22:31 +0800)] 
parser: fix wrong parsing of diff comments

If the subject of a submission is prefixed by 'Re:', then it can't be a
patch or cover letter.

Signed-off-by: WEN Pingbo <wengpingbo@gmail.com>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agoAdd sqlparse to production requirements
Daniel Axtens [Tue, 20 Sep 2016 06:04:20 +0000 (16:04 +1000)] 
Add sqlparse to production requirements

It's required for migration #10 (w/ RunSQL), per upstream docs:

    https://docs.djangoproject.com/en/1.8/ref/migration-operations/#runsql

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agobin: Remove update-patchwork-status
Stephen Finucane [Fri, 9 Sep 2016 17:27:46 +0000 (18:27 +0100)] 
bin: Remove update-patchwork-status

If this ever did anything then it no longer does. Remove it.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agoCHANGELOG: Document latest changes
Stephen Finucane [Wed, 14 Sep 2016 17:18:52 +0000 (18:18 +0100)] 
CHANGELOG: Document latest changes

...in prep for v2.0.0.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agoCHANGELOG: Add v1.1.1 release
Stephen Finucane [Wed, 14 Sep 2016 16:51:22 +0000 (17:51 +0100)] 
CHANGELOG: Add v1.1.1 release

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agoCHANGELOG: Integrate UPGRADING content
Stephen Finucane [Wed, 14 Sep 2016 16:43:02 +0000 (17:43 +0100)] 
CHANGELOG: Integrate UPGRADING content

Rewrite the CHANGELOG as necessary, making better use of the
'UPGRADING' section

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agotrivial: Fix incorrectly subclassed 'save's
Stephen Finucane [Fri, 9 Sep 2016 16:23:53 +0000 (17:23 +0100)] 
trivial: Fix incorrectly subclassed 'save's

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Remove unreachable code
Stephen Finucane [Fri, 9 Sep 2016 16:20:58 +0000 (17:20 +0100)] 
trivial: Remove unreachable code

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: noqa unused imports
Stephen Finucane [Fri, 9 Sep 2016 16:19:51 +0000 (17:19 +0100)] 
trivial: noqa unused imports

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Combine if statements
Stephen Finucane [Fri, 9 Sep 2016 16:19:30 +0000 (17:19 +0100)] 
trivial: Combine if statements

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Use 'in' operator
Stephen Finucane [Fri, 9 Sep 2016 16:02:58 +0000 (17:02 +0100)] 
trivial: Use 'in' operator

Don't do 'x == a or x == b'. Prefer 'x in [a, b]' instead.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Don't use non-Pythonic names
Stephen Finucane [Fri, 9 Sep 2016 16:00:51 +0000 (17:00 +0100)] 
trivial: Don't use non-Pythonic names

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Use implicit true/false for comparison
Stephen Finucane [Mon, 19 Sep 2016 22:15:38 +0000 (23:15 +0100)] 
trivial: Use implicit true/false for comparison

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: noqa any 'assert' functions
Stephen Finucane [Mon, 19 Sep 2016 22:15:26 +0000 (23:15 +0100)] 
trivial: noqa any 'assert' functions

There are advantages to sticking with unittest's use of camel case in
function names, but some code tools don't like this. noqa these lines
to hide the warnings.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Remove broad exceptions where possible
Stephen Finucane [Thu, 8 Sep 2016 16:43:10 +0000 (17:43 +0100)] 
trivial: Remove broad exceptions where possible

The are two somewhat significant changes:

* The behavior of 'Bundle.add_patch' is changed. Previously this would
  raise an exception if the provided patch already existed in the
  bundle. Since this code was only used in one location, change this to
  return the BundlePatch if valid else None and change the calling code
  to check return value instead of catching the exception.
* Use a context manager to open the config file in pwclient. This loses
  a little granularity in error messaging, but this is a worthy
  compromise.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agotrivial: Don't shadow built-ins
Stephen Finucane [Mon, 19 Sep 2016 22:15:14 +0000 (23:15 +0100)] 
trivial: Don't shadow built-ins

* Don't use 'str', 'id', 'max', etc. as variable names
* Remove unnecessary use of six.range
* Remove unnecessary use of six.map

There is one paramter in xmlrpc that cannot be renamed as it could
break some client code. noqa this instead.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agoviews: Remove cyclic import
Stephen Finucane [Mon, 19 Sep 2016 22:15:01 +0000 (23:15 +0100)] 
views: Remove cyclic import

There's no need to do imports this way, so move notification handling
into a suitable module.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agoxmlrpc: Bump version
Stephen Finucane [Thu, 8 Sep 2016 16:28:17 +0000 (17:28 +0100)] 
xmlrpc: Bump version

This should have been bumped with 'c547dc7'.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agoxmlrpc: Factor out common code
Stephen Finucane [Thu, 8 Sep 2016 16:26:30 +0000 (17:26 +0100)] 
xmlrpc: Factor out common code

Now that every endpoint accepts negative max_counts, the code that does
this can be factored out.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
8 years agogitignore: Ignore vagrant and vim files
Stephen Finucane [Mon, 19 Sep 2016 22:11:54 +0000 (23:11 +0100)] 
gitignore: Ignore vagrant and vim files

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agoOptimise querying of checks in patch list view
Daniel Axtens [Thu, 15 Sep 2016 08:10:29 +0000 (18:10 +1000)] 
Optimise querying of checks in patch list view

tl;dr: with about 300 mails from the patchwork list, according to
django-debug-toolbar, to render '/project/patchwork/list/'

Without this patch:
 - ~1.35 seconds of CPU time
 - 110 SQL queries, taking ~70ms

With this patch:
 - < 0.3 seconds of CPU time
 - 10 SQL queries, taking <20ms

How? Replace an .exclude() on a QuerySet with a list comprehension.
Yes, that's normally a pessimisation.  Surprisingly, it's an
optimisation here.  Why? Where we're looking at patches in anything
that uses a generic_list() in the view, we do a prefetch_related. But,
if we then do a .filter or a .exclude, that throws out the existing,
cached information, and does another query. (See the Django docs on
prefetch_related)

So, do it 'by hand' in Python instead.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agofields: Stub out unused arguments
Stephen Finucane [Wed, 7 Sep 2016 21:03:49 +0000 (22:03 +0100)] 
fields: Stub out unused arguments

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agosettings: noqa the secret key
Stephen Finucane [Wed, 7 Sep 2016 21:03:48 +0000 (22:03 +0100)] 
settings: noqa the secret key

This is a development setting file. Dismiss the 'dodgy' warning on
landscape.io.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agoMark regexes with 'r' prefixes
Stephen Finucane [Wed, 7 Sep 2016 21:03:47 +0000 (22:03 +0100)] 
Mark regexes with 'r' prefixes

Resolves landscape.io errors.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
8 years agodocker: Install dependencies for Python 2 also
Stephen Finucane [Sat, 3 Sep 2016 17:49:02 +0000 (18:49 +0100)] 
docker: Install dependencies for Python 2 also

Aspects of both Patchwork and Django, such as the 'makemigrations'
management command, function differently under Python 3. It should be
possible to run these commands under Python 2. Install dependencies in
the Python 2 environment to make this a possibility.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Acked-by: Daniel Axtens <dja@axtens.net>
9 years agoREADME: Add travis badge
Stephen Finucane [Wed, 7 Sep 2016 21:06:08 +0000 (22:06 +0100)] 
README: Add travis badge

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
9 years agoAdd .travis.yml file
Daniel Axtens [Tue, 9 Aug 2016 04:27:41 +0000 (14:27 +1000)] 
Add .travis.yml file

This automatically runs the tests (except the browser ones) via tox.

Tested on my github account. This will require some setup on the GitHub
end: Travis will need to be turned on for the project, and ideally a
badge added to the readme so we can see the build status.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoutils: Rename to 'notifications'
Stephen Finucane [Mon, 22 Aug 2016 14:06:48 +0000 (15:06 +0100)] 
utils: Rename to 'notifications'

Every function in this file is related to notifications. Rename the
file and functions therein to something more meaningful.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoREADME: Add landscape.io badge
Stephen Finucane [Sun, 4 Sep 2016 14:19:05 +0000 (15:19 +0100)] 
README: Add landscape.io badge

Also partially reverts 'a93f5ec' as badge images are still served from
the '.org' domain.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoAdd landscape.io configuration file
Stephen Finucane [Sun, 4 Sep 2016 14:12:53 +0000 (15:12 +0100)] 
Add landscape.io configuration file

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agogitignore: Don't ignore all hidden files
Stephen Finucane [Sun, 4 Sep 2016 14:12:12 +0000 (15:12 +0100)] 
gitignore: Don't ignore all hidden files

This allows the addition of some config files.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoviews: Avoid mutable default arguments
Stephen Finucane [Sun, 4 Sep 2016 00:29:01 +0000 (01:29 +0100)] 
views: Avoid mutable default arguments

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agolib: Refresh nginx/uwsgi configuration
Thomas Monjalon [Tue, 6 Sep 2016 20:37:03 +0000 (22:37 +0200)] 
lib: Refresh nginx/uwsgi configuration

As stated in http://uwsgi-docs.readthedocs.io/en/latest/Nginx.html:
"
Unfortunately nginx is not able to rewrite PATH_INFO accordingly to
SCRIPT_NAME. For such reason you need to instruct uWSGI to map specific
apps in the so called “mountpoint” and rewrite SCRIPT_NAME and PATH_INFO
automatically
[...]
ancient uWSGI versions used to support the so called “uwsgi_modifier1 30”
approach. Do not do it. it is a really ugly hack
"

Replacing the uwsgi_modifier1 hack by a mount point seems to work.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
9 years agotox: Don't create '.pyc' files
Stephen Finucane [Sat, 3 Sep 2016 19:18:02 +0000 (20:18 +0100)] 
tox: Don't create '.pyc' files

In '8e58c29', code was added to delete '.pyc' files. However, this was
later reverted in '9fd161' due to the increase in run time that this
incurred. However, the need to avoid stale '.pyc' files still exists.
To resolve this, add the 'PYTHONDONTWRITEBYTECODE' environment option
to disable generation of these files. This includes a slight
performance increase.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoviews: fix pwclient download link
David Lamparter [Tue, 26 Jul 2016 14:51:02 +0000 (16:51 +0200)] 
views: fix pwclient download link

Looks like a copypaste snafu.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoxmlrpc: massively increase test coverage
Daniel Axtens [Sat, 3 Sep 2016 07:07:20 +0000 (17:07 +1000)] 
xmlrpc: massively increase test coverage

XMLRPC defines a bunch of very similar methods for getting and
listing a bunch of different models. So create a mixin that allows
us to test an arbitrary model, then use that to create test classes
to test the various models.

Add other tests as well.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoxmlrpc authentication: Fix base64 decoding for py3
Daniel Axtens [Sat, 3 Sep 2016 07:07:19 +0000 (17:07 +1000)] 
xmlrpc authentication: Fix base64 decoding for py3

The byte/string distinction in Python 3 requires this messy set of
encode/decode to work.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoxmlrpc: remove a redundant try/except block
Daniel Axtens [Sat, 3 Sep 2016 07:07:18 +0000 (17:07 +1000)] 
xmlrpc: remove a redundant try/except block

The try block just raises the exception it catches, so just get rid of
it.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoxmlrpc: catch possible exceptions in patch filtering
Daniel Axtens [Sat, 3 Sep 2016 07:07:17 +0000 (17:07 +1000)] 
xmlrpc: catch possible exceptions in patch filtering

Currently, filtering by project, submitter, delegate or state uses a
filter(id=filt[key])[0]. This will throw an exception when something
isn't found, as filter will return [], and getting the first element of
that will fail.

Convert them to explicit get()s, so it's clearer that they can throw an
exception, then catch the 3 possible types of DoesNotExists exceptions.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoxmlrpc: remove some unnecessary try/except blocks
Daniel Axtens [Sat, 3 Sep 2016 07:07:16 +0000 (17:07 +1000)] 
xmlrpc: remove some unnecessary try/except blocks

filter() can never raise a DoesNotExist exception, so we don't need a
try/except block around these.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoxmlrpc: fix max_count for check_list
Daniel Axtens [Sat, 3 Sep 2016 07:07:15 +0000 (17:07 +1000)] 
xmlrpc: fix max_count for check_list

Negative values were broken due to some missing code. Fix it by adding
code based on an example from one of the other models.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoxmlrpc: Change filter(...)[0] to get(...)
Daniel Axtens [Sat, 3 Sep 2016 07:07:14 +0000 (17:07 +1000)] 
xmlrpc: Change filter(...)[0] to get(...)

filter() returns a list or [], and get() returns an object or raises an
exception.

Currently, we use filter()[0] inside a try/except model.DoesNotExist
block. This doesn't work: if filter returns [] we'll get an exception
about list indices, not a DoesNotExist exception.

Switch these over to get(), allowing them to use the existing exception
flow.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agotest: fix coverage tests
Daniel Axtens [Sat, 3 Sep 2016 07:07:13 +0000 (17:07 +1000)] 
test: fix coverage tests

* ignore migrations
 * install dev requirements, as the dev settings are used

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agoparser: Correct empty email value check
Stephen Finucane [Mon, 18 Apr 2016 10:21:09 +0000 (11:21 +0100)] 
parser: Correct empty email value check

The check for empty emails in 'find_author' checked for None, but it
was not possible to ever return None unless the 'From:' header was
missing altogether. Seeing as, per RFC822 and its revisions, this is
not possible, check for the empty string instead.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agotests: Additional rework of 'test_parser'
Stephen Finucane [Tue, 12 Jul 2016 15:56:13 +0000 (16:56 +0100)] 
tests: Additional rework of 'test_parser'

The 'test_parser' file was reworked in 'e14a071'. Extend this rework to
include refactoring of tests related to 'find_author'.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agoparser: Ensure consistent use of 'parse_'
Stephen Finucane [Mon, 9 May 2016 12:34:02 +0000 (13:34 +0100)] 
parser: Ensure consistent use of 'parse_'

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agoparser: Put more specific 'From' regex first
Stephen Finucane [Thu, 14 Apr 2016 16:38:57 +0000 (17:38 +0100)] 
parser: Put more specific 'From' regex first

Multiple different 'From:' header styles are supported by the parser,
but some of these are less specific than others. Attempt to parse using
a more specific style before going with the more generic one.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agoparsemail: Move parsing to 'parser'
Stephen Finucane [Sun, 10 Apr 2016 12:45:13 +0000 (13:45 +0100)] 
parsemail: Move parsing to 'parser'

Separate the parsing of mails from the CLI aspects of parsemail. Since
there is already a 'parser' module, it makes sense to place the parsing
functionality here. This will allow for additional uses of this parsing
functionality in the future.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agoparser: Move hash_diff and extract_tags
Stephen Finucane [Tue, 12 Jul 2016 13:59:39 +0000 (14:59 +0100)] 
parser: Move hash_diff and extract_tags

These functions are only used in models.Patch. Add them as static
methods.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agoparser: Remove 'main' function
Stephen Finucane [Sun, 10 Apr 2016 14:05:17 +0000 (15:05 +0100)] 
parser: Remove 'main' function

This is unnecessary given the combination of parsemail and tests.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agotrivial: Cleanup of 'parser'
Stephen Finucane [Sun, 10 Apr 2016 12:45:13 +0000 (13:45 +0100)] 
trivial: Cleanup of 'parser'

Do some cleanup of the file by removing excess whitespace, adding some
documentation, removing shadowing of keywords and renaming some
functions to more accurately reflect their purpose.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
9 years agoxmlrpc: Don't use 'reverse'
Stephen Finucane [Thu, 1 Sep 2016 19:57:09 +0000 (20:57 +0100)] 
xmlrpc: Don't use 'reverse'

queryset.reverse() is either broken or being used incorrectly in
Django 1.6 and Django 1.7. Replace it with an alternative approach.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Closes-bug: #35
Tested-by: Daniel Axtens <dja@axtens.net>
9 years agorequirements: Update django debug toolbar to 1.5
Stephen Finucane [Sun, 21 Aug 2016 17:06:55 +0000 (18:06 +0100)] 
requirements: Update django debug toolbar to 1.5

This is the latest version. This breaks compatibility with Django 1.7,
but this version is unsupported and should not be used for development.
We do, however, continue to test support for Django 1.7 and 1.6.

This also prevents the need to manually track sqlparse dependency [1].

[1] https://github.com/jazzband/django-debug-toolbar/issues/856

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agotox: Add Python 3.5
Daniel Axtens [Tue, 9 Aug 2016 04:55:23 +0000 (14:55 +1000)] 
tox: Add Python 3.5

Python 3.5 is shipped with Ubuntu 16.04, and it's the new stable
release. Add support for this runtime in tox. Note that Django 1.6 and
1.7 don't work with Python 3.5, so these are excluded.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agodocker: Install Python 3.4
Daniel Axtens [Fri, 26 Aug 2016 06:55:59 +0000 (16:55 +1000)] 
docker: Install Python 3.4

Currently, we tox test against Python 3.4. Python 3.4 is included with
Ubuntu 14.04, which is supported for several years to come, so we want
to keep supporting it. However, Python 3.4 isn't included with Ubuntu
16.04, which is what the Docker image is based on.

We could downgrade the container to 14.04, but then we'd struggle to
get Python 3.5 into the container. Python 3.5 is the most recent in the
Python 3 series, so we should also be supporting it.

Add the apt sources for Trusty and pull in Python 3.4 from there.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agodocs: Update readthedocs URLs
Stephen Finucane [Mon, 29 Aug 2016 23:35:41 +0000 (00:35 +0100)] 
docs: Update readthedocs URLs

'readthedocs.io' is preferred to 'readthedocs.org'. Update all relevant
links.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agodocs: Document SELinux issues
Stephen Finucane [Mon, 29 Aug 2016 23:35:40 +0000 (00:35 +0100)] 
docs: Document SELinux issues

Initial Docker setup caused me some heartache on Fedora. Briefly
document the issues encountered to help other users.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
9 years agodocs: Make Docker the recommended install method
Stephen Finucane [Mon, 29 Aug 2016 23:35:39 +0000 (00:35 +0100)] 
docs: Make Docker the recommended install method

Docker is faster, lighter and "hipper" than Vagrant. Promote this
method over the Vagrant approach.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
9 years agodocker: Move 'docker' directory to 'tools'
Stephen Finucane [Mon, 29 Aug 2016 23:35:38 +0000 (00:35 +0100)] 
docker: Move 'docker' directory to 'tools'

...like the Vagrant scripts (which have been renamed also).

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Acked-by: Daniel Axtens <dja@axtens.net>
9 years agodocs: Add a paragraph about the django admin console
Florian Fainelli [Tue, 30 Aug 2016 01:12:15 +0000 (18:12 -0700)] 
docs: Add a paragraph about the django admin console

Provide a few hints about how to get initial access to the django admin
console as well as a few essential configuration hints regarding
projects and sites setup.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agopwclient: Unhardcode prints to ~/.pwclientrc
Florian Fainelli [Tue, 30 Aug 2016 01:12:14 +0000 (18:12 -0700)] 
pwclient: Unhardcode prints to ~/.pwclientrc

Even though the default location is ~/.pwclientrc, we can change it, so
use CONFIG_FILE wherever we can to make the prints match the actual file
location.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Stephen Finucane <stephenfinucane@hotmail.com>
9 years agotox: Disable F405
Stephen Finucane [Sat, 13 Aug 2016 22:43:04 +0000 (23:43 +0100)] 
tox: Disable F405

Recent versions of tox throw a lot of errors when using star-imports.
While these warnings are generally justified, the settings files
require this. Since 'noqa'-ing the offending lines would be rather
arduous, simply disable the warning instead.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>