| Commit message (Collapse) | Author | Age | Files | Lines |
|\ |
|
| |
| |
| |
| |
| |
| | |
Check for opt-out status before sending notification mail.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
| |
| |
| |
| |
| |
| | |
Allow a separate From: address for notificaton emails.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
|/
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
| |
Use the implied line continuations, and make the indentation more clear.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
| |
This is to replace the couple of places where we duplicate this same
check.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
| |
Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
| |
Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
| |
Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
| |
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
| |
Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
| |
Signed-off-by: Dirk Wallenstein <halsmit@t-online.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
| |
We should now be able to decode internationalised Subject headers, so
add tests for this.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
| |
We need to add an import for HeaderParser on python 2.4; email.Parser
appears to contain the right stuff.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
|
| |
Add a a pull_url to the Patch object, and update the parser to look for
git-pull style emails.
Requires SQL migration script.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
| |
minor whitespace fix.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
| |
Ecartis inserts X-list list headers.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
| |
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ModelForm was causing validation issues, especially with no-change
fields on required model fields.
Add a test for updating a required field (state) through
MultiplePatchForm.
Change it to a normal form, and call instance.setattr manually. This
makes the new test pass.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
| |
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
| |
The number of times I've edited this code and wondered why nothing
changes...
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
|
|
| |
We need to remove no-change fields, as newer versions of django are
checking for proper types on validation.
Fixes MultipleUpdateTest.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|
|
|
|
|
|
|
| |
Add a test for updating mulitple patches. Currently fails with django
1.1.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
|