patchwork
9 years agojs: Add jquery and jquery tablednd plugins
Jeremy Kerr [Sun, 16 Jun 2013 08:35:21 +0000 (16:35 +0800)]
js: Add jquery and jquery tablednd plugins

Based on a change from Andreas Bießmann <andreas@biessmann.de>.

Rather than requiring a download of the jquery library + tablednd
plugin, commit these to the repository.

In doing so, we upgrade to version 1.10.1 of jqeury, and the current
stable tablednd.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agotest/mboxviews: Add test for header-supplied dates
Jeremy Kerr [Mon, 10 Jun 2013 04:29:34 +0000 (12:29 +0800)]
test/mboxviews: Add test for header-supplied dates

Check that a Date: header in the original message is equivalent to the
header generated in the mbox output.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agoviews/mbox: Use Date: header from original message
Jeremy Kerr [Mon, 10 Jun 2013 03:50:21 +0000 (11:50 +0800)]
views/mbox: Use Date: header from original message

Since we use UTC for internal date storage, we lose the timestamp info
from the original patch submissions. This means that the mbox views
(which are typically passed through to SCM commit logs) lose the
timezone information.

This change uses the Date header from the original message, if possible.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agoviews: Move mbox handling from models to views
Jeremy Kerr [Mon, 10 Jun 2013 03:37:25 +0000 (11:37 +0800)]
views: Move mbox handling from models to views

Mbox generation is related to views, not the models themselves. This
change creates a patch_to_mbox function in the views/ directory, which
the actual view handlers use instead of Patch.mbox().

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agomodels: Fix invalid dates in patch mbox
Jeremy Kerr [Mon, 10 Jun 2013 02:16:24 +0000 (10:16 +0800)]
models: Fix invalid dates in patch mbox

Currently, the Date header in mbox views is incorrect;
datetime.datetime.utctimetuple assumes that the date is in the local
timezone, but we keep all dates as UTC.

This change replaces utctimetuple with a manual calculation of the
seconds-since-epoch timestamp, which email.utils.formatdate requires. We
add a testcase for this too.

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agomodels: fix From header in mbox view
Andreas Bießmann [Fri, 10 May 2013 00:44:26 +0000 (00:44 +0000)]
models: fix From header in mbox view

The From header in mbox view was corrupt for patch submitters with non-ASCII
characters in their names. RFC 2822 requires to retain the mail as ASCII in
braces '<' and '>' while the name should be coded. Before we coded the whole
string which led to some MUA misinterpret the From header (while git could
manage it).
Fix this by coding just the name and let the email untouched.

Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agotests/mboxviews: add test for correct From header
Andreas Bießmann [Fri, 10 May 2013 00:44:25 +0000 (00:44 +0000)]
tests/mboxviews: add test for correct From header

Currently we produce corrupted 'From' header in mbox output when senders name
contains non ASCII characters. Provide a test to show this issue.

Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agobundles: Don't display 'Change order' button on public bundle view
Jeremy Kerr [Sun, 21 Apr 2013 06:50:46 +0000 (14:50 +0800)]
bundles: Don't display 'Change order' button on public bundle view

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agobundles: Don't allow slashes in bundle names
Jeremy Kerr [Sat, 20 Apr 2013 14:34:28 +0000 (22:34 +0800)]
bundles: Don't allow slashes in bundle names

Because bundle names are used in URLs, we don't want slashes in them.

Include a SQL migration script.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agobundles: Remove separate public bundle views
Jeremy Kerr [Sat, 20 Apr 2013 13:45:40 +0000 (21:45 +0800)]
bundles: Remove separate public bundle views

Having two views for bundles (public and non-public) can cause confusion
when bundle owners want to share a URL; it's not obvious that the
private URL isn't shareable.

This change removes the private URLs, and puts all bundles under the
/bundle/<username>/<bundlename>/ URL space. For non-public bundles, this
will just 404 for non-owners.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agoforms: Only pass post data to multiplepatchform if that was what was submitted
Jeremy Kerr [Sun, 30 Dec 2012 05:57:18 +0000 (13:57 +0800)]
forms: Only pass post data to multiplepatchform if that was what was submitted

When updating bundles, we get a spurious error message in the
MultiplePatchForm; it's performing validation on the blank form data.

This change only passes the post data to the MuliplePatchForm if we
detect (through data['form']) that it was the MultiplePatchForm that was
submitted.

This fixes the current testsuite failure.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agotests/bundle: Check for form errors during bundle updates
Jeremy Kerr [Sun, 30 Dec 2012 05:31:08 +0000 (13:31 +0800)]
tests/bundle: Check for form errors during bundle updates

Add a check for patchform errors during bundle update operations, both
when logged in as a maintainer and a regular user.

This exposes a problem with the maintainer patchform: we see an
unexpected form error with the state input.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agotests/bundle: Add bundle update tests, fix missing action behaviour
Jeremy Kerr [Sun, 30 Dec 2012 05:21:01 +0000 (13:21 +0800)]
tests/bundle: Add bundle update tests, fix missing action behaviour

Add a couple of tests for the bundle update views. This exposes a
problem with no action is specified, so fix this too.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agotemplates/bundle: Unify public bundle meta information
Jeremy Kerr [Sun, 30 Dec 2012 04:31:50 +0000 (12:31 +0800)]
templates/bundle: Unify public bundle meta information

Currently, the public bundle meta information (the download link before
the list of patches) differs from that of the private bundle view. This
change unifies this information with the private view.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agotests/bundle: Add tests for public bundle views
Jeremy Kerr [Sun, 30 Dec 2012 04:15:25 +0000 (12:15 +0800)]
tests/bundle: Add tests for public bundle views

Ensure that public bundles are accessible, and that private ones are
not.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agoviews/bundle: Allow downloading public bundle as mbox
Simo Sorce [Tue, 6 Nov 2012 17:45:08 +0000 (17:45 +0000)]
views/bundle: Allow downloading public bundle as mbox

Downloading single patches anonymously is allowed, we may as well allow
downloading public bundles as mboxes.

This patch also changes the file name to be bundle-<id>-<name>.mbox so
that the file name is unique even if bundle names are reused.

Signed-off-by: Simo Sorce <idra@samba.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agopwclient: Add a little more space in 'pwclient list'
Doug Anderson [Mon, 3 Dec 2012 14:13:41 +0000 (14:13 +0000)]
pwclient: Add a little more space in 'pwclient list'

New patch IDs are now 7 digits long on patchwork.kernel.org.  Give a
little more space.

Signed-off-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agoxmlrpc: Avoid trying to marshall None for people with no name
Doug Anderson [Fri, 21 Dec 2012 13:42:43 +0000 (13:42 +0000)]
xmlrpc: Avoid trying to marshall None for people with no name

If a person sent patches with no real name, they may have None for
their name.  In this case just use their email address as their name.

The previous pwclient error that would show up looks like:

  $ pwclient list -w anonymous@example.com
  Traceback (most recent call last):
    File ".../pwclient", line 631, in <module>
      main()
    File ".../pwclient", line 570, in main
      action_list(rpc, filt, submitter_str, delegate_str, series_str)
    File ".../pwclient", line 316, in action_list
      ids = person_ids_by_name(rpc, submitter_str)
    File ".../pwclient", line 241, in person_ids_by_name
      people = rpc.person_list(name, 0)
    File "/usr/lib/python2.7/xmlrpclib.py", line 1224, in __call__
      return self.__send(self.__name, args)
    File "/usr/lib/python2.7/xmlrpclib.py", line 1578, in __request
      verbose=self.__verbose
    File "/usr/lib/python2.7/xmlrpclib.py", line 1264, in request
      return self.single_request(host, handler, request_body, verbose)
    File "/usr/lib/python2.7/xmlrpclib.py", line 1297, in single_request
      return self.parse_response(response)
    File "/usr/lib/python2.7/xmlrpclib.py", line 1473, in parse_response
      return u.close()
    File "/usr/lib/python2.7/xmlrpclib.py", line 793, in close
      raise Fault(**self._stack[0])
  xmlrpclib.Fault: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal None unless allow_none is enabled">

Signed-off-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
9 years agopwclient: Add command for printing patch info
Doug Anderson [Mon, 3 Dec 2012 14:08:17 +0000 (14:08 +0000)]
pwclient: Add command for printing patch info

This command prints raw information that patchwork has about a patch.  This can
be useful for debugging problems with patchwork.

Signed-off-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotemplates: patchwork project URL fixes
Jeremy Kerr [Thu, 29 Nov 2012 00:40:19 +0000 (08:40 +0800)]
templates: patchwork project URL fixes

We need a trailing slash, and to update the URL in the about page too.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotemplates: Update patchwork project URL
Jeremy Kerr [Tue, 6 Nov 2012 08:37:37 +0000 (16:37 +0800)]
templates: Update patchwork project URL

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotemplates: Add link to the projects website in the projects view
Simo Sorce [Fri, 26 Oct 2012 12:51:43 +0000 (12:51 +0000)]
templates: Add link to the projects website in the projects view

Allows the casual visitor to check out what all these projects
actually are.

Signed-off-by: Simo Sorce <idra@samba.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agoAdd URL and SCM data to projects
Simo Sorce [Fri, 26 Oct 2012 12:51:42 +0000 (12:51 +0000)]
Add URL and SCM data to projects

This allows us to display friendly links to the project website,
web SCM UI and SCM URL.

For example for the patchwork project these could be set to:
web_url: http://jk.ozlabs.org/projects/patchwork/
scm_url: git://ozlabs.org/home/jk/git/patchwork
webscm_url: http://git.ozlabs.org/?p=patchwork;a=tree

Requires a DB schema upgrade

Signed-off-by: Simo Sorce <idra@samba.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agoAdd shortcut to admin panel
Simo Sorce [Wed, 24 Oct 2012 19:08:43 +0000 (19:08 +0000)]
Add shortcut to admin panel

This patch adds a shortcut to the admin panel but only for users that
are members of staff.

Signed-off-by: Simo Sorce <idra@samba.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agopwclient: lookup patch_id given Message-Id
Ben Myers [Mon, 5 Nov 2012 13:15:01 +0000 (21:15 +0800)]
pwclient: lookup patch_id given Message-Id

Add a pwclient search option '-m' to look up a patch id given a
Message-id. This is useful for automation and mailer hooks.

Signed-off-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agoFix grant script
Simo Sorce [Wed, 24 Oct 2012 22:07:00 +0000 (18:07 -0400)]
Fix grant script

patchwork_patchchangenotification_id_seq does not exist,
so running this script simply fails with a rollback

Signed-off-by: Simo Sorce <idra@samba.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agobundles: Add check for duplicate bundles
Jeremy Kerr [Mon, 22 Oct 2012 04:19:27 +0000 (12:19 +0800)]
bundles: Add check for duplicate bundles

... rather than failing with an IntegrityError.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agorequestcontext: Initialise 'messages' context var
Jeremy Kerr [Sun, 17 Jun 2012 07:39:21 +0000 (15:39 +0800)]
requestcontext: Initialise 'messages' context var

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agosettings: Use new class for auth context processor
Jeremy Kerr [Sun, 17 Jun 2012 07:38:22 +0000 (15:38 +0800)]
settings: Use new class for auth context processor

Since django 1.2 auth module is in contrib, not core.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agosettings: Use class-based template loading API
Jeremy Kerr [Sun, 17 Jun 2012 07:36:41 +0000 (15:36 +0800)]
settings: Use class-based template loading API

The TEMPLATE_LOADERS setting changed in django-1.2. Template loaders are
now based on calsses rather than callables.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agosettings: Add message middleware
Jeremy Kerr [Thu, 6 Sep 2012 01:12:56 +0000 (09:12 +0800)]
settings: Add message middleware

This seems to be required for admin updates.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agopwclient: Pass input to git-am as a UTF-8 string
Jeremy Kerr [Tue, 4 Sep 2012 00:28:03 +0000 (08:28 +0800)]
pwclient: Pass input to git-am as a UTF-8 string

.. to prevent ascii codec exceptions.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotemplates: Don't rely on bool(Page)
Jeremy Kerr [Sun, 17 Jun 2012 08:06:37 +0000 (16:06 +0800)]
templates: Don't rely on bool(Page)

The behaviour of bool(Page) changed in django 1.4 - it no longer
evaluates to False when page has no objects.

When checking for an empty patch list, use page.paginator.count.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agomodels: Add connection parameter for HashField.db_type.
Jeremy Kerr [Fri, 4 May 2012 01:52:23 +0000 (09:52 +0800)]
models: Add connection parameter for HashField.db_type.

This is required by django-1.4.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests: Find test data relative to file location
Dirk Wallenstein [Thu, 3 May 2012 02:45:39 +0000 (02:45 +0000)]
tests: Find test data relative to file location

Make test execution independent of the current directory.

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests/notifications: Add test for escaped patch names
Jeremy Kerr [Tue, 1 May 2012 07:51:38 +0000 (15:51 +0800)]
tests/notifications: Add test for escaped patch names

.. to test for the fix introduced in 18986b7e.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agonotifications: do not HTML-escape patch change notifications
Stefan Hajnoczi [Sun, 15 Jan 2012 09:49:24 +0000 (09:49 +0000)]
notifications: do not HTML-escape patch change notifications

Patch change notifications are text/plain emails and should not
HTML-escape patch names.  This means quotes and ampersands in patch
names should not be turned into &quot; and &amp; HTML entities.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests: Check the right optin email
Dirk Wallenstein [Mon, 30 Apr 2012 09:17:55 +0000 (09:17 +0000)]
tests: Check the right optin email

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests/patchparser: abstract delegate and state testing
Jeremy Kerr [Mon, 30 Apr 2012 06:40:15 +0000 (14:40 +0800)]
tests/patchparser: abstract delegate and state testing

No need to repeat the same query logic.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests/patchparser: don't assume PK values
Jeremy Kerr [Mon, 30 Apr 2012 06:34:48 +0000 (14:34 +0800)]
tests/patchparser: don't assume PK values

PK values may not start at 1 for each test, so remove filters that
assume this.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests: Add tests for explicit delegate and state requests
Dirk Wallenstein [Sun, 29 Apr 2012 03:11:49 +0000 (03:11 +0000)]
tests: Add tests for explicit delegate and state requests

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agoUse an explicit initial default patch state
Dirk Wallenstein [Sun, 29 Apr 2012 03:11:48 +0000 (03:11 +0000)]
Use an explicit initial default patch state

This will make editing states through the admin UI less error-prone, and
will facilitate parsing patches when relying on a default state, as well as
testing.

Use the explicit default state when parsing mails.

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agoparser: allow words starting with "diff" at beginning of line
Stefan Hajnoczi [Sat, 14 Jan 2012 01:17:40 +0000 (01:17 +0000)]
parser: allow words starting with "diff" at beginning of line

The patch parser splits emails incorrectly when the comment contains a
line whose first word starts with "diff" (like "difficult" or
"different").

For a real-life example of an email that triggers this bug, see
http://patchwork.ozlabs.org/patch/135291/.

Fix the issue by checking for a space after "diff".  Add
DiffWordInCommentTest to the test suite.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agosql: remove development migration script
Jeremy Kerr [Thu, 8 Dec 2011 14:28:22 +0000 (22:28 +0800)]
sql: remove development migration script

The projectmaintainer heirachy hasn't been implemented, so we don't need
the migration script yet.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests/patchparser: Add CVS format patch test
Jeremy Kerr [Thu, 8 Dec 2011 14:07:28 +0000 (22:07 +0800)]
tests/patchparser: Add CVS format patch test

Test that CVS-formatted patches are parsed correctly, and that we
capture the correct 'Index: ' metadata.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agotests: add abstract mbox parsing test
Jeremy Kerr [Thu, 8 Dec 2011 14:00:43 +0000 (22:00 +0800)]
tests: add abstract mbox parsing test

Add a new class to handle mbox-parsing code, abstracting what is done by
the current git-pull tests.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
10 years agofilters: handle utf-8 characters when building filter querystring
Jeremy Kerr [Thu, 8 Dec 2011 13:42:26 +0000 (21:42 +0800)]
filters: handle utf-8 characters when building filter querystring

Currently, we build the filter querystring by passing the raw string to
urllib.quote, which expects an encoded string. When the raw string (in
this case, a unicode object) contains a unicode character, quote()
raises a KeyError.

This fixes the problem by encoding the parameter name and values to
UTF-8 first.

Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agopatchwork: new pwclient git-am action
david decotigny [Tue, 22 Nov 2011 09:12:48 +0000 (09:12 +0000)]
patchwork: new pwclient git-am action

This commit adds a new "pwclient git-am" action which applies given
patch ID on the current git branch using "git am". It's convenient to
keep track and authorship of patches applied locally from a patchwork
server.

Signed-off-by: David Decotigny <david.decotigny@google.com>
11 years agoparser: allow other protocol types in pull-request handling
Jeremy Kerr [Fri, 25 Nov 2011 09:55:19 +0000 (17:55 +0800)]
parser: allow other protocol types in pull-request handling

Change the parser's regex to allow other protocol types, not just git://

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agomodels: Update Person & UserProfile object whenever User is saved
Jeremy Kerr [Mon, 19 Sep 2011 02:33:51 +0000 (10:33 +0800)]
models: Update Person & UserProfile object whenever User is saved

Currently, UserProfiles are only saved on creation of the User object,
before the first_name and last_name attributes are set. This means that
we fallback to using the User.username value as the new Person.name.

This change modifies User's post-save signal to always update the Person
object, both on creation and updates. This means we get the proper name
appearing on Person instances.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoMerge branch 'notifications'
Jeremy Kerr [Mon, 19 Sep 2011 01:42:44 +0000 (09:42 +0800)]
Merge branch 'notifications'

11 years agoxmlrpc: do slice before patch_to_dict
Jeremy Kerr [Mon, 18 Jul 2011 13:46:08 +0000 (21:46 +0800)]
xmlrpc: do slice before patch_to_dict

Currently, we map patch_to_dict before we slice the results (to only
return max_count patches). This means that we hacve to retrieve all
patches, then throw away most of the results of the map.

This change does the slice on the patches before the map, letting django
do a LIMIT-ed query instead.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agosettings: Use multiple-DB-style format for default settings
Jeremy Kerr [Tue, 19 Apr 2011 05:18:45 +0000 (13:18 +0800)]
settings: Use multiple-DB-style format for default settings

The DATABASE_* settings have been deprecated in django 1.3, replaced by
the multiple-database style format (introduced in 1.2, which patchwork
requires anyway).

This change modifies the default settings.py to use the new format.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoPatchwork now requires Django 1.2, so state that in docs/INSTALL
Guilherme Salgado [Thu, 14 Apr 2011 04:16:36 +0000 (04:16 +0000)]
Patchwork now requires Django 1.2, so state that in docs/INSTALL

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoOrder: always set Order.order
Jeremy Kerr [Tue, 19 Apr 2011 05:09:36 +0000 (13:09 +0800)]
Order: always set Order.order

If we create an Order objecty with editable = True, we don't initialise
self.order, leading to testsuite failures with django-1.3.

This change always initialises Order.order (and Order.reversed), so we
don't exit the constructor without these initalised.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agonotifications: implement opt-out notifications
Jeremy Kerr [Thu, 14 Apr 2011 11:37:55 +0000 (19:37 +0800)]
notifications: implement opt-out

Check for opt-out status before sending notification mail.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agonotifications: Add NOTIFICATION_FROM_EMAIL setting
Jeremy Kerr [Thu, 14 Apr 2011 03:25:47 +0000 (11:25 +0800)]
notifications: Add NOTIFICATION_FROM_EMAIL setting

Allow a separate From: address for notificaton emails.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agonotifications: Add code to send notifications
Jeremy Kerr [Tue, 29 Mar 2011 14:18:54 +0000 (22:18 +0800)]
notifications: Add code to send notifications

Add a function (patchwork.utils.send_notifications) to process the
PatchChangeNotification queue. We try to group mail to the same sender,
by waiting settings.NOTIFICATION_DELAY_MINUTES to allow other
notifications to arrive.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agomodels: Add PatchChangeNotification and record patch state changes
Jeremy Kerr [Tue, 29 Mar 2011 03:58:39 +0000 (11:58 +0800)]
models: Add PatchChangeNotification and record patch state changes

Add a PatchChangeNotification model to keep track of changes to a
patch's state. Hook this up to Patch's pre_save signal.

Requires a DB schema upgrade.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoAdd email opt-out system
Jeremy Kerr [Wed, 11 Aug 2010 06:16:28 +0000 (14:16 +0800)]
Add email opt-out system

We're going to start generating emails on patchwork updates, so firstly
allow people to opt-out of all patchwork communications.

We do this with a 'mail settings' interface, allowing non-registered
users to set preferences on their email address. Logged-in users can do
this through the user profile view.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoregistration: use EmailConfimation rather than separate registration app
Jeremy Kerr [Sun, 31 Oct 2010 23:29:29 +0000 (19:29 -0400)]
registration: use EmailConfimation rather than separate registration app

Since we have infrastructure for email confirmations, we no longer need
the separate registration app.

Requires a migration script, which will delete all inactive users,
including those newly added and pending confirmation. Use carefully.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoUse generic email confirmation object
Jeremy Kerr [Thu, 12 Aug 2010 04:15:48 +0000 (12:15 +0800)]
Use generic email confirmation object

Rather than having a UserPerson-specific confirmation, add an
EmailConfirmation object to allow multiple types of confirmations (eg,
opt-out requests in future).

To do this, we use a view (patchwork.views.confirm) that will call the
type-specific view with the confirmation object.

Also, add tests to check that the User/Person linkage system works.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoforms: Fix MultipleBooleanField.to_python when the field value is missing
Guilherme Salgado [Wed, 13 Apr 2011 06:11:07 +0000 (06:11 +0000)]
forms: Fix MultipleBooleanField.to_python when the field value is missing

If you write a test for, say, the bundle form of a patch list, you'd
still have to specify the 'no change' value to other form (e.g. the
multiple update one) fields using MultipleBooleanField or else it'd
raise a ValueError when field.clean() is called as part of
form._get_errors().

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agomodels: use implied line continuations
Jeremy Kerr [Thu, 14 Apr 2011 06:58:10 +0000 (14:58 +0800)]
models: use implied line continuations

Use the implied line continuations, and make the indentation more clear.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agomodels: Project.is_editable to check whether a user has edit rights
Guilherme Salgado [Tue, 12 Apr 2011 11:35:10 +0000 (11:35 +0000)]
models: Project.is_editable to check whether a user has edit rights

This is to replace the couple of places where we duplicate this same
check.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoviews: Refactor generic_list() to make it less complicated
Guilherme Salgado [Tue, 12 Apr 2011 11:34:57 +0000 (11:34 +0000)]
views: Refactor generic_list() to make it less complicated

When a form is submitted it now delegates to separate processing
functions according to the action.  Apart from being more readable it's
now a lot easier to add extra forms for processing lists of patches.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoadmin: Streamline admin model registration
Dirk Wallenstein [Fri, 1 Apr 2011 07:12:15 +0000 (07:12 +0000)]
admin: Streamline admin model registration

Use autodiscover and the new way to hook AdminSite into the URLconf.
AdminSite.root() will be removed in Django-1.3 as noted here:
http://docs.djangoproject.com/en/dev/internals/deprecation/

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agosettings: Remove hard-coded absolute paths
Guilherme Salgado [Mon, 28 Feb 2011 02:38:29 +0000 (02:38 +0000)]
settings: Remove hard-coded absolute paths

This is so that you don't have to change a dozen variables when you
deploy an instance somewhere other than on /srv/patchwork.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agopatchwork-update-commits: add missing `update` to command line
Paul Menzel [Wed, 23 Mar 2011 17:10:31 +0000 (18:10 +0100)]
patchwork-update-commits: add missing `update` to command line

Otherwise the following error is shown:

    Too many arguments specified

Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoRemove a bunch of unused variables
Guilherme Salgado [Mon, 28 Feb 2011 02:40:44 +0000 (02:40 +0000)]
Remove a bunch of unused variables

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoUse the 'in' operator instead of dict.has_key(), which has been deprecated
Guilherme Salgado [Mon, 28 Feb 2011 02:39:36 +0000 (02:39 +0000)]
Use the 'in' operator instead of dict.has_key(), which has been deprecated

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoparser: Get rid of some code duplication in parsemail-batch.sh
Guilherme Salgado [Mon, 28 Feb 2011 01:54:18 +0000 (01:54 +0000)]
parser: Get rid of some code duplication in parsemail-batch.sh

Change parsemail-bash.sh to uses parsemail.sh (instead of parsemail.py),
as the former sets the required environment variables that were being
set in parsemail-batch.sh.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agotemplates: remove redundant 'about' link from main nav
Jeremy Kerr [Mon, 28 Mar 2011 09:32:31 +0000 (17:32 +0800)]
templates: remove redundant 'about' link from main nav

We have a link to the about page right below.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agomodels: use User.post_save signal to create UserProfile objects
Jeremy Kerr [Thu, 10 Mar 2011 10:06:50 +0000 (18:06 +0800)]
models: use User.post_save signal to create UserProfile objects

Rather than relying on the registration app's callback mechanism to
create the UserProfile object, use the post_save signal on auth.User.

This means that the UserProfile will be created regardless of how the
User was created.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoReplace tab characters with spaces on .py files
Guilherme Salgado [Wed, 9 Mar 2011 10:00:56 +0000 (10:00 +0000)]
Replace tab characters with spaces on .py files

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoRemove unused imports
Guilherme Salgado [Wed, 9 Mar 2011 01:15:06 +0000 (01:15 +0000)]
Remove unused imports

This is so that we can use static analysis tools like pyflakes to find
undefined names (and other common mistakes we often make) without being
swamped with unused imports warnings.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoviews: use id__in = get_patch_ids() to get the modified patch set
Jeremy Kerr [Wed, 9 Mar 2011 05:20:10 +0000 (13:20 +0800)]
views: use id__in = get_patch_ids() to get the modified patch set

Currently, we generic_list processes patches in order of the patch_id:X
parameter, which is arbitrarily decided by the browser.

By using id__in, we get patches sorted by the default Patch model
ordering. This means that the (arbitrary) order of get_patch_ids()
doesn't affect the ordering of patches that we process, and bundles
are created with a reasonable default patch order.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoforms: Fix archiving/unarchiving of patches on patch lists
Guilherme Salgado [Mon, 28 Feb 2011 02:37:03 +0000 (02:37 +0000)]
forms: Fix archiving/unarchiving of patches on patch lists

It was broken because MultipleBooleanField() was leaking string values instead
of boolens as expected by MultiplePatchForm.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoparser: Allow pull requests to include a diff
Guilherme Salgado [Mon, 28 Feb 2011 01:50:24 +0000 (01:50 +0000)]
parser: Allow pull requests to include a diff

If a patch comes along with a pull request and a diff, add both to the
Patch model.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoRemove unused templates and some code for processing them
Guilherme Salgado [Wed, 23 Feb 2011 06:34:40 +0000 (06:34 +0000)]
Remove unused templates and some code for processing them

These seem to be what was used in the past to archive/unarchive and delete
patches.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agofilters: quote param names and values when constructing querystrings
Jeremy Kerr [Mon, 28 Feb 2011 06:43:31 +0000 (14:43 +0800)]
filters: quote param names and values when constructing querystrings

Use urllib.quote to sanitise parameter names and values; prevents
escaped ampersands in the input qs from appearing unescaped in the
link output.

Add a testcase for the unescaped qs fragments

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agotests: Support execution of single tests
Dirk Wallenstein [Wed, 16 Feb 2011 08:41:30 +0000 (08:41 +0000)]
tests: Support execution of single tests

Django does not use suite() when executing single tests.  Importing all
tests directly into __init__.py has the same effect as the replaced
version of suite().

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agopatchwork-update-commits: autodetect patchwork install directory
Sascha Silbe [Fri, 11 Feb 2011 04:49:21 +0000 (04:49 +0000)]
patchwork-update-commits: autodetect patchwork install directory

Make patchwork-update-commits work from outside the Patchwork git
repository so it can be used for other projects.

Signed-off-by: Sascha Silbe <sascha-pgp@silbe.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agohelpers: Change patchwork.wsgi to include the apps/ dir in sys.path
Guilherme Salgado [Tue, 15 Feb 2011 02:30:54 +0000 (02:30 +0000)]
helpers: Change patchwork.wsgi to include the apps/ dir in sys.path

Without this, templates will crash as they reference patchwork.<module>
directly.

Also removes the patchwork.wsgi symlink from the root and use the real
file in patchwork.wsgi.conf instead, as suggested by Dirk Wallenstein.

Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoparser: Recognize mail headers for delegate and state
Dirk Wallenstein [Wed, 26 Jan 2011 05:12:29 +0000 (05:12 +0000)]
parser: Recognize mail headers for delegate and state

Introduce two new Patchwork mail headers that determine the initial
state and delegate of a patch.  They take a state name as displayed in
Patchwork and the email address of the wanted delegate.  An example:

X-Patchwork-State: Changes Requested
X-Patchwork-Delegate: maintainer@project.tld

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoadmin: Embellish model change lists
Dirk Wallenstein [Tue, 18 Jan 2011 00:16:00 +0000 (00:16 +0000)]
admin: Embellish model change lists

Add fields to the admin change list pages of patchwork models, and add
filters and search boxes where appropriate.

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agotests/parser: Add test for wrapped git pull requests
Jeremy Kerr [Fri, 11 Feb 2011 01:45:54 +0000 (09:45 +0800)]
tests/parser: Add test for wrapped git pull requests

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoparser: Account for mail client line wrapping in pull requests
Dirk Wallenstein [Mon, 17 Jan 2011 00:40:43 +0000 (00:40 +0000)]
parser: Account for mail client line wrapping in pull requests

If a mail client wraps the line with the sha, there won't necessarily be
a space after 'commit'.

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agomodels: Don't require optional model fields in forms
Dirk Wallenstein [Sun, 16 Jan 2011 23:46:48 +0000 (23:46 +0000)]
models: Don't require optional model fields in forms

Add blank = True for nullable fields, to allow forms to be subitted
without a value for these fields.

The keyword 'blank' concerns only validation and does not change what
will be stored in the database.

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agomodels: Implement __unicode__ in models instead of __str__
Dirk Wallenstein [Sat, 15 Jan 2011 01:16:21 +0000 (01:16 +0000)]
models: Implement __unicode__ in models instead of __str__

According to the Django documentation at [1] it is recommended to
implement __unicode__ and not __str__.  Django's model base class
provides a __str__ method that will use the __unicode__ method and
convert to utf-8.  Also, every text value returned from the DB through
the model is unicode.

It is now possible to edit Patches and Persons that have values with
non-ASCII characters through the admin interface.

[1] http://docs.djangoproject.com/en/1.2/ref/unicode/

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agotemplates: Spelling fix
Dirk Wallenstein [Wed, 12 Jan 2011 23:05:07 +0000 (23:05 +0000)]
templates: Spelling fix

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoReplace tab in indentation with space
Dirk Wallenstein [Wed, 12 Jan 2011 23:05:08 +0000 (23:05 +0000)]
Replace tab in indentation with space

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agotemplates: Fix pwclient no-match messages
Dirk Wallenstein [Wed, 12 Jan 2011 23:05:09 +0000 (23:05 +0000)]
templates: Fix pwclient no-match messages

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agodocs: Fix link creation example
Dirk Wallenstein [Wed, 12 Jan 2011 23:05:06 +0000 (23:05 +0000)]
docs: Fix link creation example

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agotests/parser: Add subject encoding tests
Jeremy Kerr [Fri, 11 Feb 2011 00:45:51 +0000 (08:45 +0800)]
tests/parser: Add subject encoding tests

We should now be able to decode internationalised Subject headers, so
add tests for this.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoparser: Decode the subject header
Dirk Wallenstein [Wed, 12 Jan 2011 22:37:56 +0000 (22:37 +0000)]
parser: Decode the subject header

The clean_header function decodes internationalized headers.  Use it for
the subject, too.

Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoRevert "Decode patch from UTF-8 while parsing from stdin"
Jeremy Kerr [Thu, 10 Feb 2011 03:19:23 +0000 (11:19 +0800)]
Revert "Decode patch from UTF-8 while parsing from stdin"

This reverts commit 7fd7d0bbe4e3fce405e02e9e630ef70023fdd43e.

parse_patch() will never be handed anything but unicode, so no need to
do the decode.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agoDecode patch from UTF-8 while parsing from stdin
martin f. krafft [Fri, 5 Feb 2010 03:33:25 +0000 (04:33 +0100)]
Decode patch from UTF-8 while parsing from stdin

Patchwork (rightfully) hashes patches using UTF-8:

  parser.py:
    def hash_patch(str):
      […]
      hash.update(line.encode('utf-8') + '\n')

This patch makes sure that it treats the incoming data as UTF-8 as well.

Signed-off-by: martin f. krafft <madduck@madduck.net>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agopwclient: fix handling of UTF-8 char in submitter name
Andreas Bießmann [Tue, 7 Dec 2010 15:48:20 +0000 (16:48 +0100)]
pwclient: fix handling of UTF-8 char in submitter name

This patch fixes following bug in 'list':

---8<---
# pwclient list -p uboot -w andreas.devel | grep New
Traceback (most recent call last):
  File "/Users/andreas/bin/pwclient", line 463, in <module>
    main()
  File "/Users/andreas/bin/pwclient", line 411, in main
    action_list(rpc, filt, submitter_str, delegate_str)
  File "/Users/andreas/bin/pwclient", line 182, in action_list
    (person['name'], person['email'])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in
position 32: ordinal not in range(128)
--->8---

Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
11 years agotemplates: use custom templates for password change
Jeremy Kerr [Fri, 10 Dec 2010 04:24:14 +0000 (12:24 +0800)]
templates: use custom templates for password change

Add a couple of templates to keep the password change flow in the same
look & feel as the rest of the site.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>