summaryrefslogtreecommitdiffstats
path: root/apps
Commit message (Collapse)AuthorAgeFilesLines
* parsemail: Honour existing PYTHONPATHDamien Lespiau2014-11-101-1/+1
| | | | | | | | | For setups where the patchwork dependencies are not part of the system packages, one needs to indicate where to find them. parsemail.sh was overriding PYTHONPATH without leaving us a chance to join in. Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: add %{_msgid_} to print message-id without surrounding < and >Jani Nikula2014-11-101-1/+8
| | | | | | | | The angle brackets are not really part of the message-id. Making it possible to get the message-id without them is helpful. Signed-off-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: add output format option to list/search commandJani Nikula2014-11-101-10/+27
| | | | | | | | | Make scripting easier by letting the user specify the output format. The format string may contain tag references to fields, such as %{id} and %{msgid}. Signed-off-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: Remove unhandled action 'save'Bernhard Reutner-Fischer2014-11-101-1/+1
| | | | | | | The 'save' action really is called 'get' (as opposed to 'view'). Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: Rephrase patch_ids iteratorBernhard Reutner-Fischer2014-11-101-10/+14
| | | | | | | | Don't generate an empty array, use for-loop instead as noticed by Jacob E. Keller Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: Simplify argument handlingBernhard Reutner-Fischer2014-11-101-27/+13
| | | | | | | | dict().get() returns a default of None, use that to initialize our internal variables. Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: add --help / -? to all sub commandsBernhard Reutner-Fischer2014-11-101-19/+25
| | | | | | | Remove over-cautious helptext printing while at it Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* settings: Make sure to use a tuple for TEMPLATE_DIRSDamien Lespiau2014-09-071-1/+1
| | | | | | | | Django 1.7 has added a check to make sure TEMPLATE_DIRS is a tuple. We were missing a ',', the key piece to define a tuple with one element. Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: preserve ordering of patch idsJeremy Kerr2014-09-071-1/+1
| | | | | | | | | | | Currently, we use a frozenset to remove duplicates in the patch id list. However, this means we lose the patch ordering, which is important for a git-am. This change drops the frozenset, so we preserve the ordering from the arguments. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: diagnose hash_parser errors gracefullyBernhard Reutner-Fischer2014-09-071-12/+33
| | | | | | | | | | | a386e636cc0adaa760a66b6ab042178027fc45c7 removed argparse mutual exclusive group, so manually diagnose: 1) missing required hash_str / IDs 2) if both hash_str as well as IDs are seen Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: allow multiple IDsBernhard Reutner-Fischer2014-09-071-26/+34
| | | | | | | | | | | | | | | | | | | | Allow commands that take an ID to operate on multiple IDs. E.g.: update -s Superseded 1 2 3 4 5 apply 2 4 6 Reject update -c COMMIT-REF on multiple IDs though as that does not make sense. Implementation note: nargs='*' instead of '?' results in (wrong/inconvenient): mutually exclusive arguments must be optional So remove mutual exclusive handling via argparse and instead do it by hand. This might be implemented more conveniently in later python but we (have to) stick with 2.7.x for the time being. Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: support signoff in the pwclientrcBernhard Reutner-Fischer2014-09-071-1/+7
| | | | | | | | | | | | Try to obtain git-am '--signoff' settings from: - the commandline - the global option section - per-project section v2: handle NoOptionError Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: Remove now obsolete usage()Bernhard Reutner-Fischer2014-09-071-32/+4
| | | | | Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: simplify hash/id handlingBernhard Reutner-Fischer2014-09-071-39/+28
| | | | | | | and obtain "action" from args.subcmd while at it Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: add git-am -s supportBernhard Reutner-Fischer2014-09-071-45/+192
| | | | | | | Optionally pass --signoff to git-am Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* parsemail: Fallback to common charsets when charset is None or x-unknownSiddhesh Poyarekar2014-07-243-6/+135
| | | | | | | | | | | | | | We recently encountered a case in our glibc patchwork instance on sourceware, where a patch was dropped because it had x-unknown charset. This change adds a fallback on a set of encodings (instead of just utf-8) when the charset is not mentioned or if it is set as x-unknown. Minor changes and testcase by Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Siddhesh Poyarekar <siddhesh@redhat.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* views: fix patch_to_mbox() for postscriptAndreas Bießmann2014-07-241-5/+2
| | | | | | | | | Before we changed the comment 'some comment\n---\n some/file | 1 +' to 'some comment\n\n---\nsome/file | 1 +\n'. Now we pass this comment unchanged. Signed-off-by: Andreas Bießmann <andreas@biessmann.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests/mboxviews: test for unchanged postscriptAndreas Bießmann2014-07-241-0/+28
| | | | | | | | | | | | | | Currently a patch containing postscript is always modified in patch_to_mbox() compared to the input patch. A comment containing 'some comment\n---\n some/file | 1 +' will be changed to 'some comment\n\n---\nsome/file | 1 +\n' which is annoying. This patch adds a test to detect that, a follow up patch will fix the error then. Signed-off-by: Andreas Bießmann <andreas@biessmann.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* settings.py: use python to find ROOT_DIRAndreas Bießmann2014-07-241-3/+1
| | | | | Signed-off-by: Andreas Bießmann <andreas@biessmann.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: add bash completion for project namesYann E. MORIN2014-07-041-0/+29
| | | | | | | | Add initial bash-completion, which so far only completes on the project names. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: accept more than one project in ~/.pwclientrcYann E. MORIN2014-07-041-14/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, given the format of ~/.pwclientrc, pwclient can only really act on a single project, as ~/pwclientrc can only contain the configuration for a single project. Although the -p options comes in handy to specify a project different from the one configured in ~/.pwclientrc, this only works if it is hosted on the same server. As soon as one needs to switch server, it is necessary to edit ~/pwclientrc. This can be quite inefficient when dealing with many projects, hosted on different servers. Change the format of ~/.pwclientrc so it is possible to define more than one project, and for each project, specify an URL and credentials. The new format is like: [options] default = project-A [project-A] url = http://my.patchwork.server/path/to/xmlrpc username = that-is-me password = secret [other-project] url = http://you.get/the/idea username = someone password = 1234 This has the advantage of not changing the options to pwclient, so the user experience is unmodified. If a ~/.pwclentrc exists in the old format, it is automatically converted over to the new format, and the previous one is saved as ~/.pwclientrc.orig. Upon conversion, no action is made, pwclient just exits (with return-code 1) to inform the user to review the conversion. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: rename variable CONFIG_FILES to be singularYann E. MORIN2014-07-041-2/+2
| | | | | | | | | | | We only support a single config file, so there is no need to have a plural in this variable. Also, we'll need to know what the default config file is, when we want to save it to migrate to the new format. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* filters: fix exception in filter querystring generationJeremy Kerr2014-06-031-1/+2
| | | | | | | | | | | We get a silent (as it's during template render) exception when generating filter querystrings, as we're passing a list to the string format operator rather than a tuple. This change removes the map and explicitly applies sanitise to the (name, value) pair. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests/utils: Fix List-Id headers on emails from create_emailJeremy Kerr2014-06-031-2/+3
| | | | | | | | | We need to use the project's List Id in the List-Id header, not the linkname. We'll also need to populate the .listid member of defaults.project. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* views/generic_list: reduce number of queries in list renderingJeremy Kerr2014-05-081-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, we do two database queries per patch on a list view; one to retrieve the submitter, and one for the state. This patch adds a .select_related to fetch for the submitter and state, and a .defer() to prevent loading large amounts of text data from the patch content and headers. This gives a significant reduction in the work per request. For a paginated list view (ie 100 patches per page): before after User 1344 ms 228 ms System 170 ms 25 ms Total 1514 ms 253 ms Elapsed 1605 ms 274 ms Context switch (vol) 4206 40 Context switch (invol) 326 75 SQL queries 212 15 Longest query 13 ms 5 ms Total query time 121 ms 20 ms Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* models: order projects by linkname by defaultJeremy Kerr2014-05-071-0/+4
| | | | | | So we get a sensible list of projects on the front page's project list. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests: Add XMLRPC interface testJeremy Kerr2014-05-072-0/+56
| | | | | | | | This change adds a simple test for the XMLRPC interface, essentially to ensure that configuration changes haven't broken accessibility to the interface. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* urls: Fix django-1.6 change in password change viewsJeremy Kerr2014-05-072-2/+40
| | | | | | | The expected name for the password change views no longer has the auth_ prefix. This change fixes this and adds a testcase. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* views/xmlrpc: request.raw_post_data has been deprecatedJeremy Kerr2014-05-071-1/+1
| | | | Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* utils/Order: Fix application of orderingJeremy Kerr2014-04-242-3/+81
| | | | | | | We can't just re-apply orderings to the same queryset, we need to apply all at once. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests: Make tests compatible with django 1.6Jeremy Kerr2014-04-2315-14/+14
| | | | | | | The default test runner in django 1.6 relies on tests being named test*.py, rather that an explicit <appname>.test module. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Fix django-1.6 incompatibilitiesJeremy Kerr2014-04-232-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We're seeing a couple of final quirks running the testsuite on django 1.6: Traceback (most recent call last): File "patchwork/apps/patchwork/tests/notifications.py", line 182, in testNotificationEscaping errors = send_notifications() File "patchwork/apps/patchwork/utils.py", line 227, in send_notifications delete_notifications() File "patchwork/apps/patchwork/utils.py", line 197, in delete_notifications pk__in = notifications).delete() File "/usr/lib/python2.7/dist-packages/django/db/models/manager.py", line 163, in filter return self.get_queryset().filter(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 590, in filter return self._filter_or_exclude(False, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/db/models/query.py", line 608, in _filter_or_exclude clone.query.add_q(Q(*args, **kwargs)) File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1198, in add_q clause = self._add_q(where_part, used_aliases) File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1232, in _add_q current_negated=current_negated) File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1122, in build_filter lookup_type, value) File "/usr/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 1107, in get_lookup_constraint values = [get_normalized_value(value) for value in raw_value] File "/usr/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 1084, in get_normalized_value value_list.append(getattr(value, source.attname)) AttributeError: 'PatchChangeNotification' object has no attribute 'id' - we're specifying our own pk here, so the PatchChangeNotification has no id attribute; it looks like the pk__in syntax is expecting IDs. We also need a default value for BooleanField, as we're getting integrity errors when creating rows with no explicit send_notifications set. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests/utils: Don't rely on field error message APIJeremy Kerr2014-04-221-1/+1
| | | | | | | The location of EmailField's message changed in 1.6, just use a fixed string instead. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests/patchparser: Inherit from djagno.test.TestCaseJeremy Kerr2014-04-221-8/+8
| | | | | | | Since these tests may touch the database, we need the transaction handling that django.test.TestCase provides. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Defer Person creation/linkage until registration is confirmedJeremy Kerr2014-04-225-14/+33
| | | | | | | | We currently create Person objects when a registration is submitted, not when it is confirmed. This can lead to stale Person objects for unconfirmed registrations. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Add unconfirmed registration expiryJeremy Kerr2014-04-225-4/+151
| | | | | | | | | | | | Currently, unconfirmed registrations remain in the database. Although we have an expiry for the registrations, we don't actually remove rows from the database. This can clog the admin interface up with unnecessary registration spam. We currently have a patchwork cron script to send notifications on patch changes, so hook this into a new do_expiry function. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Update manage.py to post a post-1.4 version.Jeremy Kerr2014-04-222-12/+8
| | | | | | | | | | Django version 1.6 deprecates some of the django.core.management API, so we need a post-1.4 version. The semantics with app include paths have changed with this version, so update the urlconf to use the same path as manage.py. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Remove references to django.conf.urls.defaultsJeremy Kerr2014-04-212-2/+2
| | | | | | | django.conf.urls.defaults has been deprecated, replace with django.conf.urls, and remove the 'import *' syntax. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* views/order: Apply default ordering as secondaryJeremy Kerr2014-04-212-3/+15
| | | | | | | | | | If we're ordering by a certain non-default field, then the ordering of patches with that same field will be arbitrary. This change applies the default as a secondary ordering, so we're not left with an arbitrary sub-order. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* pwclient: fix handling UTF-8 in patch infoAndreas Bießmann2014-01-281-1/+1
| | | | | | | | | | | | | | | | | | | This patch fixes following error when redirecting 'pwclient info' output: ---8<--- andreas@dockstar % pwclient info 295268 > /tmp/test.out Traceback (most recent call last): File "/home/andreas/bin/pwclient", line 508, in <module> main() File "/home/andreas/bin/pwclient", line 471, in main action_info(rpc, patch_id) File "/home/andreas/bin/pwclient", line 242, in action_info print("- %- 14s: %s" % (key, value)) UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 29: ordinal not in range(128) --->8--- Signed-off-by: Andreas Bießmann <andreas@biessmann.de> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Add a config option to FORCE_HTTPS_LINKSKonstantin Ryabitsev2013-10-132-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | In situations where SSL is terminated at the load-balancer, we cannot rely on guessing the scheme based on whether patchwork itself was accessed via http or https, since the last-leg is always going to be done over http. Unfortunately, wrongly using http:// URLs results in unusable .pwclientrc files, since xmlrpc does not handle http->https redirects and instead displays a traceback. This change introduces a FORCE_HTTPS_LINKS option, which forces pwclientrc links to always return "https" regardless of how the project itself is accessed. It appears that the http/https check is currently only used for generating pwclientrc -- a lot of other places seem to hardcode "http://" and rely on the server to transparently upgrade the connection. This is not a secure approach (it allows for MITM and SSL-Strip attacks) and therefore all places currently hardcoding http://{{site.domain}} and similar should be switched to using the "sheme" variable, the same as done for generating pwclientrc files. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* tests: Use strings from fields module for error testsJeremy Kerr2013-10-133-9/+11
| | | | | | | Rather than hard-coding expected error messages, grab the values from the fields module, and expose through the test utils. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* parser: Add support for rename-only patchesJeremy Kerr2013-10-134-0/+98
| | | | | | | | | | | | | Yann E. MORIN reported a problem where patchwork drops patches with only renames: http://lists.busybox.net/pipermail/buildroot/2013-October/079999.html This change fixes the issue by adding a new state for patch 'meta' headers: header test which is not parsed as a hunk, but has the same behaviour as a hunk in that it will cause the patchbuf to be populated. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* views/base: Implement limit for submitter autocompletionJeremy Kerr2013-10-132-5/+27
| | | | | | | Add a limit parameter to the completion view, and pass a limit of 20 results in the javascript. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* views/base: Include email addresses in submitter autocomplete searchJeremy Kerr2013-10-133-1/+50
| | | | | | | | Currently, we only search names, which is a problem for Person objects with only an email address set. This change includes the email addresses in the search. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* notifications: add project name to patch update notificationWolfram Sang2013-06-161-0/+3
| | | | | | | | | | Based on a feature request & patch from Wolfram Sang <wsa@the-dreams.de>. Notifications may span multiple projects, so include a summary in the subject line, and detail in the header. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* Don't use total_seconds for python < 2.7Konstantin Ryabitsev2013-06-161-2/+2
| | | | | | | | | | The total_seconds function was added to datetime in python-2.7. For compatibility with previous versions of python, use its suggested equivalent (except drop microseconds, since we don't care about them in this context). Signed-off-by: Konstantin Ryabitsev <mricon@kernel.org> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
* test/mboxviews: Add test for header-supplied datesJeremy Kerr2013-06-101-0/+15
| | | | | | | 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>
* views/mbox: Use Date: header from original messageJeremy Kerr2013-06-102-2/+12
| | | | | | | | | | | 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>
* views: Move mbox handling from models to viewsJeremy Kerr2013-06-105-88/+92
| | | | | | | | 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>