summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* notifications: implement opt-outnotificationsJeremy Kerr2011-04-143-3/+29
| | | | | | Check for opt-out status before sending notification mail. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* notifications: Add NOTIFICATION_FROM_EMAIL settingJeremy Kerr2011-04-143-1/+4
| | | | | | Allow a separate From: address for notificaton emails. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* notifications: Add code to send notificationsJeremy Kerr2011-04-146-1/+205
| | | | | | | | | 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>
* models: Add PatchChangeNotification and record patch state changesJeremy Kerr2011-04-146-2/+179
| | | | | | | | | 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>
* Add email opt-out systemJeremy Kerr2011-04-1421-15/+725
| | | | | | | | | | | 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>
* registration: use EmailConfimation rather than separate registration appJeremy Kerr2011-04-1424-78/+293
| | | | | | | | | | 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>
* Use generic email confirmation objectJeremy Kerr2011-04-1412-33/+274
| | | | | | | | | | | | | 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>
* forms: Fix MultipleBooleanField.to_python when the field value is missingGuilherme Salgado2011-04-141-2/+2
| | | | | | | | | | | 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>
* models: use implied line continuationsJeremy Kerr2011-04-141-9/+8
| | | | | | Use the implied line continuations, and make the indentation more clear. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* models: Project.is_editable to check whether a user has edit rightsGuilherme Salgado2011-04-142-3/+7
| | | | | | | This is to replace the couple of places where we duplicate this same check. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* views: Refactor generic_list() to make it less complicatedGuilherme Salgado2011-04-144-64/+59
| | | | | | | | | 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>
* admin: Streamline admin model registrationDirk Wallenstein2011-04-142-21/+11
| | | | | | | | | 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>
* settings: Remove hard-coded absolute pathsGuilherme Salgado2011-04-142-8/+17
| | | | | | | | 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>
* patchwork-update-commits: add missing `update` to command linePaul Menzel2011-03-301-1/+1
| | | | | | | | | 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>
* Remove a bunch of unused variablesGuilherme Salgado2011-03-305-11/+3
| | | | | Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Use the 'in' operator instead of dict.has_key(), which has been deprecatedGuilherme Salgado2011-03-302-3/+3
| | | | | Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* parser: Get rid of some code duplication in parsemail-batch.shGuilherme Salgado2011-03-301-8/+2
| | | | | | | | | 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>
* templates: remove redundant 'about' link from main navJeremy Kerr2011-03-301-2/+0
| | | | | | We have a link to the about page right below. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* models: use User.post_save signal to create UserProfile objectsJeremy Kerr2011-03-305-42/+10
| | | | | | | | | | 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>
* Replace tab characters with spaces on .py filesGuilherme Salgado2011-03-303-4/+4
| | | | | Signed-off-by: Guilherme Salgado <guilherme.salgado@linaro.org> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Remove unused importsGuilherme Salgado2011-03-158-38/+12
| | | | | | | | | 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>
* views: use id__in = get_patch_ids() to get the modified patch setJeremy Kerr2011-03-092-7/+63
| | | | | | | | | | | | 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>
* forms: Fix archiving/unarchiving of patches on patch listsGuilherme Salgado2011-03-082-40/+69
| | | | | | | | 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>
* parser: Allow pull requests to include a diffGuilherme Salgado2011-03-083-8/+156
| | | | | | | | 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>
* Remove unused templates and some code for processing themGuilherme Salgado2011-03-086-204/+0
| | | | | | | | 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>
* filters: quote param names and values when constructing querystringsJeremy Kerr2011-03-083-1/+40
| | | | | | | | | | 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>
* tests: Support execution of single testsDirk Wallenstein2011-02-281-14/+5
| | | | | | | | | 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>
* patchwork-update-commits: autodetect patchwork install directorySascha Silbe2011-02-281-1/+2
| | | | | | | | 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>
* helpers: Change patchwork.wsgi to include the apps/ dir in sys.pathGuilherme Salgado2011-02-283-3/+4
| | | | | | | | | | | 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>
* parser: Recognize mail headers for delegate and stateDirk Wallenstein2011-02-281-1/+24
| | | | | | | | | | | | 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>
* admin: Embellish model change listsDirk Wallenstein2011-02-111-7/+26
| | | | | | | | 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>
* tests/parser: Add test for wrapped git pull requestsJeremy Kerr2011-02-112-2/+355
| | | | Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* parser: Account for mail client line wrapping in pull requestsDirk Wallenstein2011-02-111-1/+1
| | | | | | | | 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>
* models: Don't require optional model fields in formsDirk Wallenstein2011-02-111-6/+6
| | | | | | | | | | | 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>
* models: Implement __unicode__ in models instead of __str__Dirk Wallenstein2011-02-111-7/+7
| | | | | | | | | | | | | | | | 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>
* templates: Spelling fixDirk Wallenstein2011-02-111-1/+1
| | | | | Signed-off-by: Dirk Wallenstein <halsmit@t-online.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Replace tab in indentation with spaceDirk Wallenstein2011-02-115-20/+20
| | | | | Signed-off-by: Dirk Wallenstein <halsmit@t-online.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* templates: Fix pwclient no-match messagesDirk Wallenstein2011-02-111-2/+2
| | | | | Signed-off-by: Dirk Wallenstein <halsmit@t-online.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* docs: Fix link creation exampleDirk Wallenstein2011-02-111-1/+1
| | | | | Signed-off-by: Dirk Wallenstein <halsmit@t-online.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests/parser: Add subject encoding testsJeremy Kerr2011-02-112-0/+29
| | | | | | | We should now be able to decode internationalised Subject headers, so add tests for this. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* parser: Decode the subject headerDirk Wallenstein2011-02-111-0/+2
| | | | | | | | 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>
* Revert "Decode patch from UTF-8 while parsing from stdin"Jeremy Kerr2011-02-101-1/+2
| | | | | | | | | 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>
* Decode patch from UTF-8 while parsing from stdinmartin f. krafft2010-12-131-2/+1
| | | | | | | | | | | | | | 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>
* pwclient: fix handling of UTF-8 char in submitter nameAndreas Bießmann2010-12-101-1/+2
| | | | | | | | | | | | | | | | | | | | 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>
* templates: use custom templates for password changeJeremy Kerr2010-12-103-1/+59
| | | | | | | 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>
* Add link to password change form on user profile pageSascha Silbe2010-12-101-0/+5
| | | | | Signed-off-by: Sascha Silbe <sascha-pgp@silbe.org> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* models: Fix HeaderParser import on python 2.4Jeremy Kerr2010-11-091-0/+1
| | | | | | | 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 support for git-pull requestsJeremy Kerr2010-11-018-9/+415
| | | | | | | | | 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>
* parsemail: change tab to spaceJeremy Kerr2010-11-011-1/+1
| | | | | | minor whitespace fix. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* parser: Recognize X-list list headerRalf Baechle2010-09-231-1/+1
| | | | | | Ecartis inserts X-list list headers. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>