patchwork
5 years agologin: Focus the username field on load master
Damien Lespiau [Mon, 24 Aug 2015 14:25:42 +0000 (15:25 +0100)]
login: Focus the username field on load

Wolfram wanted a small usability improvement that's easy to add: placing
the cursor automatically in the user name field when loading the login
page.

Suggested-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Acked-by: Stephen Finucane <stephen.finucane@intel.com>
5 years agotemplates: Pull jquery into base.html
Damien Lespiau [Sun, 31 Aug 2014 21:31:02 +0000 (22:31 +0100)]
templates: Pull jquery into base.html

Bootstrap needs jquery for its own JS facilities, so include it on every
page.

Acked-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotests: Move 'reverse' calls inside 'setUp'
Stephen Finucane [Fri, 21 Aug 2015 14:32:11 +0000 (15:32 +0100)]
tests: Move 'reverse' calls inside 'setUp'

Django creates test databases after it loads tests. However, any
operations that exist at class level will be executed before this
database is created. Fix the instances of this issue (mostly 'reverse'
calls or similar) by moving the calls into the relevant 'setUp'
functions for each test.

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agosettings: Move 'TEST_RUNNER' to correct location
Stephen Finucane [Fri, 21 Aug 2015 14:32:20 +0000 (15:32 +0100)]
settings: Move 'TEST_RUNNER' to correct location

Try to keep the order/structure of this file intact for as
long as possible.

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agosettings: Fix deprecated 'TEST_CHARSET' warning
Stephen Finucane [Fri, 21 Aug 2015 14:32:19 +0000 (15:32 +0100)]
settings: Fix deprecated 'TEST_CHARSET' warning

Resolve a 'RemovedInDjango19Warning' with the 'TEST_CHARSET' option.

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotrivial: Add missing licenses to 'management'
Stephen Finucane [Fri, 21 Aug 2015 14:32:18 +0000 (15:32 +0100)]
trivial: Add missing licenses to 'management'

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotrivial: Resolve PEP8 issues with 'management'
Stephen Finucane [Fri, 21 Aug 2015 14:32:17 +0000 (15:32 +0100)]
trivial: Resolve PEP8 issues with 'management'

(Added by Damien) This also moves from sys.stdout/sys.stderr to
self.stdout/self.stderr as adviced by the Django documentation.

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agomanagement: Resolve a bug with 'retag' command
Stephen Finucane [Fri, 21 Aug 2015 14:32:16 +0000 (15:32 +0100)]
management: Resolve a bug with 'retag' command

Calling 'retag' without a list of patch IDs will cause an Exception.
This is due to an invalid attempt to filter patches using this empty
argument. Resolve this by only filtering when we have arguments to
filter with.

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agomanagement: Resolve bugs with 'cron' command
Stephen Finucane [Fri, 21 Aug 2015 14:32:15 +0000 (15:32 +0100)]
management: Resolve bugs with 'cron' command

Resolve two bugs with the script:

- There's no 'main' function to call
- A variable is misnamed

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotrivial: Remove dead imports from 'tests'
Stephen Finucane [Fri, 21 Aug 2015 14:32:14 +0000 (15:32 +0100)]
trivial: Remove dead imports from 'tests'

Remove some unused imports. This keeps PEP8 happy.

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotests/test_user: Add "profile POST" tests
Stephen Finucane [Fri, 21 Aug 2015 14:32:13 +0000 (15:32 +0100)]
tests/test_user: Add "profile POST" tests

POSTing to the 'profile' view will allow configuration of some user
profiles, but this was not being tested. Resolve this.

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotests/test_user: Add "profile unlink" tests
Stephen Finucane [Fri, 21 Aug 2015 14:32:12 +0000 (15:32 +0100)]
tests/test_user: Add "profile unlink" tests

The 'link' view was not being tested. Resolve this with tests for all
paths.

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotrivial: Remove Python < 2.5 code
Stephen Finucane [Fri, 21 Aug 2015 14:32:10 +0000 (15:32 +0100)]
trivial: Remove Python < 2.5 code

None of the supported versions of Django (currently 1.6 -> 1.8)
support Python < 2.6. There is no need to keep code for older
versions of Python around.

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotrivial: Resolve some PEP8 issues
Stephen Finucane [Fri, 21 Aug 2015 14:32:09 +0000 (15:32 +0100)]
trivial: Resolve some PEP8 issues

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotrivial: Remove dead files/code
Stephen Finucane [Fri, 21 Aug 2015 14:32:08 +0000 (15:32 +0100)]
trivial: Remove dead files/code

Remove some swathes of code that are no longer used, some of which
contains issues that renders them useless.

This unused code was initially discovered by using 'coverage.py'
followed by manual inspection.

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agodocs: Rewrite documentation
Stephen Finucane [Fri, 21 Aug 2015 14:32:07 +0000 (15:32 +0100)]
docs: Rewrite documentation

The INSTALL and HACKING documents are an important guide for new
patchwork users and developers and should be as informative as
possible. A number of changes were needed to these documents owing
to the out-of-date or incomplete information they contained. These
changes include:

* Removing references to the dead mod_python/flup projects
* Adding references to Gunicorn+nginx, which a credible modern
  alternative to Apache+mod_wsgi
* Providing explanatory links to concepts/tools like ident-based
  authentication and tox
* Referencing the newer tools available to developers, like tox
  and the 'requirements.txt' files
* Integration with mkdocs, with eye on eventual publishing of
  documentation to ReadTheDocs or equivalent.

These changes result in a significant rewrite which should hopefully
lower the barrier to entry for people wishing to use or develop
patchwork.

Acked-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agotox: Update versions of Django to be tested
Stephen Finucane [Fri, 21 Aug 2015 14:32:06 +0000 (15:32 +0100)]
tox: Update versions of Django to be tested

Since patchwork now supports Django 1.8 and no longer support 1.5, it
is necessary to update the tox targets to validate this new subset of
supported Django versions.

In addition, the paths to the requirements.txt files were not updated
as part of a rebase. Correct this oversight.

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
5 years agoAdd missing explicit state fixture load
Stephen Finucane [Fri, 21 Aug 2015 14:32:05 +0000 (15:32 +0100)]
Add missing explicit state fixture load

The 'patchwork: Explicitly load states fixtures' change introduced
explicit state loading into many of the tests, but missed one.
Correct this oversight.

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
6 years agopatchwork/templates: Suppress cycle template tag warning
Jeremy Kerr [Fri, 5 Jun 2015 06:53:07 +0000 (14:53 +0800)]
patchwork/templates: Suppress cycle template tag warning

Running on django 1.7 gives a warning:

RemovedInDjango18Warning: 'The `cycle` template tag is changing to escape its arguments; the non-autoescaping version is deprecated. Load it from the `future` tag library to start using the new behavior.

Although this change doesn't affect this template, suppress the warning
by loading from the future library.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopatchwork/views: request.REQUEST is deprecated in django 1.8
Jeremy Kerr [Fri, 5 Jun 2015 06:48:31 +0000 (14:48 +0800)]
patchwork/views: request.REQUEST is deprecated in django 1.8

.. so do explicit accesses to request.GET or request.POST.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopatchwork/parser: Adapt for new unsaved-foreign-key behaviour in django 1.8
Jeremy Kerr [Fri, 5 Jun 2015 06:33:13 +0000 (14:33 +0800)]
patchwork/parser: Adapt for new unsaved-foreign-key behaviour in django 1.8

Django 1.8 no longer supports assignment of unsaved models to
ForeignKey fields:

  File "/home/jk/devel/patchwork/patchwork/tests/test_patchparser.py", line 75, in setUp
    (self.patch, self.comment) = find_content(self.project, email)
  File "/home/jk/devel/patchwork/patchwork/bin/parsemail.py", line 231, in find_content
    headers = mail_headers(mail))
  File "/home/jk/devel/patchwork/lib/python/django/db/models/base.py", line 468, in __init__
    setattr(self, field.name, rel_obj)
  File "/home/jk/devel/patchwork/lib/python/django/db/models/fields/related.py", line 668, in __set__
    (value, self.field.rel.to._meta.object_name)
ValueError: Cannot assign "<Patch: Test Subject>": "Patch" instance isn't saved in the database.

Even though we'd be guaranteed to save the patch before the comment, we
need to avoid this error.

This change defers the assigment of Comment.patch until we know we have
a saved Patch instance.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopatchwork: Add initial migrations
Jeremy Kerr [Thu, 4 Jun 2015 10:13:13 +0000 (18:13 +0800)]
patchwork: Add initial migrations

Add migrations for the patchwork app; these will be required for
django-1.9, and are required to express the test dependencies (to the
auth models) on 1.8.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopatchwork: Explicitly load states fixtures
Jeremy Kerr [Fri, 5 Jun 2015 06:32:26 +0000 (14:32 +0800)]
patchwork: Explicitly load states fixtures

Apps with migrations will no longer load the initial_data fixtures by
default. In order to prepare to add migrations to patchwork, rename the
initial_data fixture to default_states (to match the default_tags
fixture), and explicitly load them in tests that require them.

Also, include this step in the INSTALL document.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopatchwork/views: prefetch delegate in generic_list
Jeremy Kerr [Thu, 4 Jun 2015 09:58:51 +0000 (17:58 +0800)]
patchwork/views: prefetch delegate in generic_list

If patches have a delegate, the patch list template will cause a query
to render the delegate username. Instead, we should include the delegate
in the select_related query.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopatchwork/models: Use OneToOneField for PatchChangeNotifcation.patch
Jeremy Kerr [Thu, 4 Jun 2015 09:49:01 +0000 (17:49 +0800)]
patchwork/models: Use OneToOneField for PatchChangeNotifcation.patch

Same functionality, but we suppress an error from django 1.8+

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoparsemail: Don't catch all exceptions when a Project isn't found
Jeremy Kerr [Fri, 29 May 2015 00:07:19 +0000 (08:07 +0800)]
parsemail: Don't catch all exceptions when a Project isn't found

This is the first query that parsemail will do, and we don't want to
lose any non-missing-project-related errors.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoparsemail: run django.setup to initialise Models
Jeremy Kerr [Fri, 29 May 2015 00:06:24 +0000 (08:06 +0800)]
parsemail: run django.setup to initialise Models

From 1.7 onwards, we need to call django.setup() before we can use the
Model interfaces.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotests: Remove old-style test runner module
Jeremy Kerr [Thu, 28 May 2015 05:44:14 +0000 (13:44 +0800)]
tests: Remove old-style test runner module

We get the following warning on django 1.7:

System check identified some issues:

WARNINGS:
?: (1_6.W001) Some project unittests may not execute as expected.
HINT: Django 1.6 introduced a new default test runner. It looks like this project was generated using Django 1.5 or earlier. You should ensure your tests are all running & behaving as expected. See https://docs.djangoproject.com/en/dev/releases/1.6/#new-test-runner for more information.

This change removes the unneeded base test module, and moves the
patchparser doctests into a proper test module.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agocron: Move patchwork-cron script to a management command
Jeremy Kerr [Thu, 28 May 2015 05:39:05 +0000 (13:39 +0800)]
cron: Move patchwork-cron script to a management command

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopatchwork/utils: Remove unnecessary MultiplePatchForm import
Jeremy Kerr [Thu, 28 May 2015 05:26:19 +0000 (13:26 +0800)]
patchwork/utils: Remove unnecessary MultiplePatchForm import

It's not used in utils.py

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodoc: Add NEWS file for recent updates
Jeremy Kerr [Thu, 28 May 2015 02:24:54 +0000 (10:24 +0800)]
doc: Add NEWS file for recent updates

... containing a guide to migrating to the recent changes.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoAdd patch tag infrastructure
Jeremy Kerr [Wed, 27 May 2015 01:56:36 +0000 (09:56 +0800)]
Add patch tag infrastructure

This change add patch 'tags', eg 'Acked-by' / 'Reviewed-by', etc., to
patchwork.

Tag parsing is implemented in the patch parser's extract_tags function,
which returns a Counter object of the tags in a comment. These are
stored in the PatchTag (keyed to Tag) objects associated with each
patch.

We need to ensure that the main patch lists do not cause per-patch
queries on the Patch.tags ManyToManyField (this would result in ~500
queries per page), so we introduce a new QuerySet (and Manager) for
Patch, adding a with_tag_counts() method to populate the tag counts in a
single query.

As users may be migrating from previous patchwork versions (ie, with no
tag counts in the database), we add a 'retag' management command.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodocs: Add collectstatic step to installation instructions
Jeremy Kerr [Mon, 25 May 2015 09:50:45 +0000 (17:50 +0800)]
docs: Add collectstatic step to installation instructions

Because we're now using the staticfiles app, we need to run
collectstatic on init.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoUpdate documentation and default settings to suit patchwork deployment model
Jeremy Kerr [Sun, 24 May 2015 09:50:33 +0000 (17:50 +0800)]
Update documentation and default settings to suit patchwork deployment model

We've always allowed configuration without altering any of the
version-controlled files. With the recent settings changes, we have an
extra level of indirection with the dev/prod settings modules.

Since we have to edit a config file anyway, this change moves the
prod.py settings file to a template, which is then used directly by
mange.py (and the wsgi application).

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agobin: Fix references to old settings module location
Jeremy Kerr [Wed, 27 May 2015 02:25:54 +0000 (10:25 +0800)]
bin: Fix references to old settings module location

Since the settings modules have changed locations, we need to update the
parsemail script too.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodocs: Fix documentation for new settings infrastructure
Jeremy Kerr [Sun, 24 May 2015 09:33:13 +0000 (17:33 +0800)]
docs: Fix documentation for new settings infrastructure

A few tweaks for the INSTALL doc to update to the settings changes from
c641660e.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agolib/apache2: Update sample configuration files for new staticfiles application
Jeremy Kerr [Sun, 24 May 2015 09:31:56 +0000 (17:31 +0800)]
lib/apache2: Update sample configuration files for new staticfiles application

The static files app will collect all of the static files into
STATIC_ROOT, which is under htdocs/static/.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agolib/apache2: use django-1.7-compatible wsgi application
Jeremy Kerr [Sun, 24 May 2015 09:21:15 +0000 (17:21 +0800)]
lib/apache2: use django-1.7-compatible wsgi application

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoMove to a more recent django project structure
Jeremy Kerr [Sun, 24 May 2015 08:57:33 +0000 (16:57 +0800)]
Move to a more recent django project structure

This change updates patchwor to the newer project struture: we've moved
the actual application out of the apps/ directory, and the
patchwork-specific templates to under the patchwork application.

This gives us the manage.py script in the top-level now.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotox: Add tox.ini file
Stephen Finucane [Tue, 7 Apr 2015 21:20:55 +0000 (22:20 +0100)]
tox: Add tox.ini file

Currently this contains calls to execute the following on the code
base:

* Unit tests (for all currently supported versions of Django). This
  requires the addition of a "test" 'local_settings' file
* PEP8 (or, rather, flake8)
* PyLint
* Coverage (based on unit tests)

These are designed in such a way that it should be possible to easily
add additional environment for testing (like Python3 or Django 1.8).

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agosettings: Split 'settings.py' into multiple files
Stephen Finucane [Tue, 7 Apr 2015 21:20:54 +0000 (22:20 +0100)]
settings: Split 'settings.py' into multiple files

This will make testing/developing a little easier and prevent people
deploying insecure instances.

This also adds references to Django documentation in said files (for
Django novices) and restructures the files to group them together
logically.

This allows us to remove the settings file used for tests.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoIntegrate 'django.contrib.staticfiles'
Stephen Finucane [Tue, 7 Apr 2015 21:20:53 +0000 (22:20 +0100)]
Integrate 'django.contrib.staticfiles'

Rather than providing a custom solution for serving static files, use
the solution provided in the upstream Django source.

This allows us to remove the top-level 'urls.py' file.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agosettings: Restructure settings file
Stephen Finucane [Tue, 7 Apr 2015 21:20:52 +0000 (22:20 +0100)]
settings: Restructure settings file

Restructure to add some order to the settings file. This includes
removing some variables:

- TEMPLATE_CONTEXT_PROCESSORS
- TEMPLATE_LOADERS

These variables have the exact same value as the Django defaults and
thus do not need to be specified.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodocs: Use 'prod' and 'dev' requirements files
Stephen Finucane [Tue, 7 Apr 2015 21:20:51 +0000 (22:20 +0100)]
docs: Use 'prod' and 'dev' requirements files

Django 1.5 and 1.6 are no longer supported.

    https://docs.djangoproject.com/en/dev/internals/release-process/

As a result, one should not encourage people to develop and/or deploy
against these versions - the latest version of Django supported by
patchwork (currently 1.7) should be used for both.

In addition, rather than duplicating shared requirements for 'dev' and
'prod' environments, move all shared requirements to a "base" file.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agosettings: Resolve all but one Django 1.7 warning
Stephen Finucane [Tue, 7 Apr 2015 21:20:50 +0000 (22:20 +0100)]
settings: Resolve all but one Django 1.7 warning

Resolve remaining Django 1.7 warnings with the exception of a single
deprecation warning. However, this remaining issue is really a
non-issue due to the limited (and non-offending) use of the code.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoviews: Replace 'mimetype' with 'content_type'
Stephen Finucane [Tue, 7 Apr 2015 21:20:49 +0000 (22:20 +0100)]
views: Replace 'mimetype' with 'content_type'

Passing 'mimetype' to 'HttpResponse' is deprecated in 1.6 and
removed in Django 1.7. Among other things, this causes some unit
tests to fail when using Django 1.7. Its replacement - 'content_type'
- is available in Django 1.5+. This can be seen here:

    https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponse.__init__

This is therefore a like-for-like replacement.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoResolve removed 'AUTH_PROFILE_MODULE' setting
Stephen Finucane [Tue, 7 Apr 2015 21:20:48 +0000 (22:20 +0100)]
Resolve removed 'AUTH_PROFILE_MODULE' setting

The 'AUTH_PROFILE_MODULE' setting, and the 'get_profile()' method on
the 'User' model are removed in Django 1.7. This causes errors when
using Patchwork with Django 1.7+.

There are three changes necessary:

 * Replace profile model's 'ForeignKey' with a 'OneToOneField'
 * Remove all 'get_profile()' calls
 * Delete 'AUTH_PROFILE_MODULE' settings from 'settings.py'

These changes are discussed here:

    http://deathofagremmie.com/2014/05/24/retiring-get-profile-and-auth-profile-module/

Django 1.6 also introduces two other notable changes:

 * The 'XViewMiddleware' module has been moved
 * A new test runner has been introduced

It is not possible to fix these issues without breaking compatibility
with Django 1.5. As a result they have been ignored and must be
resolved in a future release.

Signed-off-by: Stephen Finucane <stephenfinucane@hotmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoMake the submitter name link to a query for that submitter
Michael Ellerman [Mon, 23 Mar 2015 06:56:22 +0000 (17:56 +1100)]
Make the submitter name link to a query for that submitter

Currently the submitter name is rendered as a mailto: link. This is
possibly useful in some circumstances, but in my experience is not
usually what I want. Although it opens a mail to the submitter, it
doesn't include any of the patch context, so is not very helpful.

Instead the submitter link can be a link to a query for patches by that
submitter. In my experience that is more useful, ie. when looking at a
single patch for a submitter you can then quickly get the list of all
patches by them.

So do that conversion.

In order to do it we need to know the current project, so that becomes a
parameter to personify. I believe the url reversal is correct, though
it's not pretty, and pulling SubmitterFilter.param out feels a little
wrong, but is the best solution I could come up with.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: honor PAGER for view
aldot [Mon, 2 Mar 2015 15:18:34 +0000 (16:18 +0100)]
pwclient: honor PAGER for view

Use the PAGER of the environment to view patches

Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoparser: Fix parsing of patches with a trailing no-newline marker
Michael Ellerman [Wed, 18 Mar 2015 03:39:24 +0000 (14:39 +1100)]
parser: Fix parsing of patches with a trailing no-newline marker

If a patch ends with a "No newline at end of file" marker, it is
incorrectly considered part of the comment.

Add a testcase which shows the bug, and then fix the parser. The parser
fix is hopefully sufficiently specific so as to not break any other
unrelated case. But ..

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
6 years agoINSTALL: Fix indentation (whitespace only change) to 4 spaces
Bryce Harrington [Fri, 5 Dec 2014 21:23:09 +0000 (13:23 -0800)]
INSTALL: Fix indentation (whitespace only change) to 4 spaces

Also, 2 newlines after each section.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoINSTALL: Fix some minor typos
Bryce Harrington [Fri, 5 Dec 2014 21:23:07 +0000 (13:23 -0800)]
INSTALL: Fix some minor typos

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoAlways use #!/usr/bin/env python
Damien Lespiau [Sat, 15 Nov 2014 01:58:25 +0000 (01:58 +0000)]
Always use #!/usr/bin/env python

Hardcoding the path to the python binary breaks virtualenv. virtualenv
creates a special python binary in the path, and specifically using
/usr/bin/python breaks that.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: support 'archived' filtering and updating
Brian Norris [Sun, 23 Nov 2014 05:49:53 +0000 (21:49 -0800)]
pwclient: support 'archived' filtering and updating

Examples:

  # Mark patch as uperseded and archived
  pwclient update -s Superseded -a yes <ID>

  # List all archived patches
  pwclient list -a yes

Notably, we still leave the '-s' option as required for 'pwclient
update'; so you can't *just* archive a patch without setting its state.
I couldn't quite figure out the right argparse usage to represent that
the user must include one or both of '-s' and '-a'.

And of course, the server must have an updated xmlrpc that supports the
'archived' field for list filtering (recently patched), otherwise you'll
just get an empty list.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: drop unused variables
Brian Norris [Sun, 23 Nov 2014 05:49:52 +0000 (21:49 -0800)]
pwclient: drop unused variables

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoxmlrpc: support filtering by 'archived'
Brian Norris [Sun, 23 Nov 2014 05:49:51 +0000 (21:49 -0800)]
xmlrpc: support filtering by 'archived'

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: exit on first patch which fails to apply
Brian Norris [Sun, 23 Nov 2014 04:38:46 +0000 (20:38 -0800)]
pwclient: exit on first patch which fails to apply

When run with more than one patch ID, the 'apply' and 'git-am' commands
should not continue to process other patches if an earlier one failed.
We should stop so the user can address the situation.

Future work: it'd be nice to just pipe all the patches at once to
git-am, so that git's nice handling of fixup-and-continue workflow can
be used.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: add project option to single-patch commands
Brian Norris [Sun, 23 Nov 2014 04:38:45 +0000 (20:38 -0800)]
pwclient: add project option to single-patch commands

Previously, we could not target a particular server instance with the
apply, git-am, info, and view subcommands. Under a single-server design,
we never needed to target a particular project for a patch. We just
targeted the patch itself. But with the advent of multi-server
.pwclientrc configurations, we should allow pwclient to specify the
project for these commands.

This adds the '-p PROJECT' option to:
 * apply
 * git-am
 * info
 * view

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoINSTALL: fix mysql syntax
Brian Norris [Sun, 23 Nov 2014 04:38:44 +0000 (20:38 -0800)]
INSTALL: fix mysql syntax

You shouldn't quote ('') the database name. MySQL complains if you do.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoTODO: remove completed items
Brian Norris [Sun, 23 Nov 2014 04:38:43 +0000 (20:38 -0800)]
TODO: remove completed items

IIUC, these items have all been completed. (The 'bundle' part of
--signoff is not completed, but that is represented in the previous
bullet.)

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoxmlrpc: include UNIX mbox 'From ' header in patch_get_mbox()
Brian Norris [Sun, 23 Nov 2014 04:38:42 +0000 (20:38 -0800)]
xmlrpc: include UNIX mbox 'From ' header in patch_get_mbox()

This function is misleadingly named 'mbox'; the contents do not begin
with a proper 'From xxx <date>' separator line. (Notably, the mbox
format does not have an authoritative standard, but at least this basic
'separator' construct is noted in http://tools.ietf.org/html/rfc4155.)

The Message.as_string() function takes an optional [unixfrom] boolean
argument. Let's use it, like we do everywhere else (including in the web
interface 'mbox' link).

Among other things, this means that we can straightforwardly concatenate
the output of patch_get_mbox(), and more tools can use this output
as-is.

Example header:

>From patchwork Fri Nov 21 18:24:29 2014
...

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoxmlrpc: add 'archived' status to patch summary
Brian Norris [Sun, 23 Nov 2014 04:38:41 +0000 (20:38 -0800)]
xmlrpc: add 'archived' status to patch summary

This will now show up in 'pwclient info'.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoviews/xmlrpc: fix xmlrpc delegate filtering
Johannes Berg [Tue, 6 Jan 2015 10:21:37 +0000 (11:21 +0100)]
views/xmlrpc: fix xmlrpc delegate filtering

Trying to use
  pwclient list -d 'johannes@sipsolutions.net'

doesn't result in any patches listed - it seems that the filter is
constructed wrongly on the xmlrpc server side (going by how the
submitter filter is done.)

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotest_notifications: Fix testNotificationUpdated timestamp comparison
Damien Lespiau [Sat, 8 Nov 2014 13:25:58 +0000 (13:25 +0000)]
test_notifications: Fix testNotificationUpdated timestamp comparison

With MySQL, the django ORM defaults to mapping DateTimeField to
Timestamp and this has only a precision of seconds.

Let's use >= here then, which doesn't affect the correctness of this
test.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodocs: Add a note about how to run tests
Damien Lespiau [Sat, 8 Nov 2014 13:25:57 +0000 (13:25 +0000)]
docs: Add a note about how to run tests

Given that hacking on patchwork is spaced in time, I always forget how
to do this. So write down a note.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agojquery: Fix jqeury typo
Damien Lespiau [Sat, 8 Nov 2014 13:25:23 +0000 (13:25 +0000)]
jquery: Fix jqeury typo

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoparsemail: Honour existing PYTHONPATH
Damien Lespiau [Sat, 25 Oct 2014 21:17:22 +0000 (22:17 +0100)]
parsemail: Honour existing PYTHONPATH

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>
6 years agodocs: Add the Debian package name for virtualenv/mysql
Damien Lespiau [Sat, 25 Oct 2014 15:24:43 +0000 (16:24 +0100)]
docs: Add the Debian package name for virtualenv/mysql

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: add %{_msgid_} to print message-id without surrounding < and >
Jani Nikula [Tue, 21 Oct 2014 08:18:54 +0000 (11:18 +0300)]
pwclient: add %{_msgid_} to print message-id without surrounding < and >

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>
6 years agopwclient: add output format option to list/search command
Jani Nikula [Tue, 21 Oct 2014 08:18:53 +0000 (11:18 +0300)]
pwclient: add output format option to list/search command

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>
6 years agoCOPYING: Add the text of the GPLv2 license
Damien Lespiau [Tue, 30 Sep 2014 23:11:30 +0000 (00:11 +0100)]
COPYING: Add the text of the GPLv2 license

I missed having that file when I first looked at the git repository to
figure out the license of the project. So add one.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: Remove unhandled action 'save'
Bernhard Reutner-Fischer [Mon, 8 Sep 2014 15:24:25 +0000 (17:24 +0200)]
pwclient: Remove unhandled action 'save'

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>
6 years agopwclient: Rephrase patch_ids iterator
Bernhard Reutner-Fischer [Mon, 8 Sep 2014 15:24:24 +0000 (17:24 +0200)]
pwclient: Rephrase patch_ids iterator

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>
6 years agopwclient: Simplify argument handling
Bernhard Reutner-Fischer [Mon, 8 Sep 2014 15:24:23 +0000 (17:24 +0200)]
pwclient: Simplify argument handling

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>
6 years agopwclient: add --help / -? to all sub commands
Bernhard Reutner-Fischer [Mon, 8 Sep 2014 15:24:22 +0000 (17:24 +0200)]
pwclient: add --help / -? to all sub commands

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>
6 years agosettings: Make sure to use a tuple for TEMPLATE_DIRS
Damien Lespiau [Thu, 4 Sep 2014 23:57:37 +0000 (00:57 +0100)]
settings: Make sure to use a tuple for TEMPLATE_DIRS

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>
6 years agodocs: Add requirements.txt for django 1.7/MySQL
Damien Lespiau [Thu, 4 Sep 2014 23:46:40 +0000 (00:46 +0100)]
docs: Add requirements.txt for django 1.7/MySQL

Note: a lot of tests fail due to the removal of the long deprecated
AUTH_PROFILE_MODULE.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodocs: Add requirements.txt for django 1.6/MySQL
Damien Lespiau [Thu, 4 Sep 2014 23:46:39 +0000 (00:46 +0100)]
docs: Add requirements.txt for django 1.6/MySQL

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodocs: Add requirements.txt for django 1.5/MySQL
Damien Lespiau [Thu, 4 Sep 2014 23:46:38 +0000 (00:46 +0100)]
docs: Add requirements.txt for django 1.5/MySQL

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoHACKING: Add some documentation about using virtualenv with patchwork
Damien Lespiau [Thu, 4 Sep 2014 23:46:37 +0000 (00:46 +0100)]
HACKING: Add some documentation about using virtualenv with patchwork

virtualenv is super nice to isolate devevelopment from the python
packages installed in the sytem. It also allows to have parallel
configurations to run tests againsts.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoINSTALL: Sprinkle a few UTF-8 in the mysql documentation
Damien Lespiau [Sun, 31 Aug 2014 00:02:37 +0000 (01:02 +0100)]
INSTALL: Sprinkle a few UTF-8 in the mysql documentation

When not specifying the charset/collation, I managed to create a latin1
database where all strings were encoded in latin1. That's really not
ideal. Adding 'CHARACTER SET utf8' when creating the DB fixes it. Then:

$ ./manage.py syncdb

will correctly create tables with UTF-8 encoded rows.

However, for some reason, when django creates the test tables, that
default, DB wide, encoding is not respected and one needs to provide an
additional TEST_CHARSET entry in the config dictionary.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoINSTALL: Update the database configuration instructions
Damien Lespiau [Sun, 31 Aug 2014 00:02:36 +0000 (01:02 +0100)]
INSTALL: Update the database configuration instructions

That's the "new" (django 1.5+) way of defining databases, strictly
following the instructions wasn't working. This should save the next
user a bit of time.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: preserve ordering of patch ids
Jeremy Kerr [Sun, 7 Sep 2014 12:05:18 +0000 (20:05 +0800)]
pwclient: preserve ordering of patch ids

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>
6 years agopwclient: diagnose hash_parser errors gracefully
Bernhard Reutner-Fischer [Fri, 29 Aug 2014 12:02:08 +0000 (14:02 +0200)]
pwclient: diagnose hash_parser errors gracefully

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>
6 years agopwclient: allow multiple IDs
Bernhard Reutner-Fischer [Fri, 29 Aug 2014 09:07:02 +0000 (11:07 +0200)]
pwclient: allow multiple IDs

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>
6 years agopwclient: support signoff in the pwclientrc
Bernhard Reutner-Fischer [Mon, 18 Aug 2014 19:20:02 +0000 (21:20 +0200)]
pwclient: support signoff in the pwclientrc

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>
6 years agopwclient: Remove now obsolete usage()
Bernhard Reutner-Fischer [Mon, 18 Aug 2014 19:07:50 +0000 (21:07 +0200)]
pwclient: Remove now obsolete usage()

Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: simplify hash/id handling
Bernhard Reutner-Fischer [Mon, 18 Aug 2014 19:07:49 +0000 (21:07 +0200)]
pwclient: simplify hash/id handling

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>
6 years agopwclient: add git-am -s support
Bernhard Reutner-Fischer [Mon, 18 Aug 2014 19:07:48 +0000 (21:07 +0200)]
pwclient: add git-am -s support

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>
6 years agoparsemail: Fallback to common charsets when charset is None or x-unknown
Siddhesh Poyarekar [Mon, 14 Jul 2014 02:21:32 +0000 (10:21 +0800)]
parsemail: Fallback to common charsets when charset is None or x-unknown

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>
6 years agopost-receive: exclude commits from the patch update step
Brian Norris [Thu, 12 Jun 2014 01:54:59 +0000 (18:54 -0700)]
post-receive: exclude commits from the patch update step

When merging upstream work related to other projects into your own
project repository, you probably don't want to check for (and try to
update) the status on every change-set in the merge. So add a list of
references (branches, tags, commits, etc.) whose commits should be
ignored in the patch update step.

This could be used, for example, to set:

    EXCLUDE="refs/heads/upstream"

Then when you're ready to merge in new upstream code, you first update
the 'upstream' branch before pushing your own.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoviews: fix patch_to_mbox() for postscript
Andreas Bießmann [Tue, 19 Nov 2013 14:44:02 +0000 (15:44 +0100)]
views: fix patch_to_mbox() for postscript

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>
6 years agotests/mboxviews: test for unchanged postscript
Andreas Bießmann [Tue, 19 Nov 2013 14:44:01 +0000 (15:44 +0100)]
tests/mboxviews: test for unchanged postscript

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>
6 years agosettings.py: use python to find ROOT_DIR
Andreas Bießmann [Tue, 19 Nov 2013 14:44:00 +0000 (15:44 +0100)]
settings.py: use python to find ROOT_DIR

Signed-off-by: Andreas Bießmann <andreas@biessmann.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoINSTALL: adopt PYTHONPATH
Andreas Bießmann [Tue, 19 Nov 2013 14:43:59 +0000 (15:43 +0100)]
INSTALL: adopt PYTHONPATH

Signed-off-by: Andreas Bießmann <andreas@biessmann.de>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotemplates: fixup HTML tags
Brian Norris [Sat, 10 May 2014 01:40:47 +0000 (18:40 -0700)]
templates: fixup HTML tags

These tags aren't matched appropriately.

There may well be others, but I caught these by a mix of eyes and
Firefox's source viewer.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopwclient: add bash completion for project names
Yann E. MORIN [Tue, 1 Jul 2014 18:14:25 +0000 (20:14 +0200)]
pwclient: add bash completion for project names

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>
6 years agopwclient: accept more than one project in ~/.pwclientrc
Yann E. MORIN [Tue, 1 Jul 2014 18:14:24 +0000 (20:14 +0200)]
pwclient: accept more than one project in ~/.pwclientrc

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>
6 years agopwclient: rename variable CONFIG_FILES to be singular
Yann E. MORIN [Tue, 1 Jul 2014 18:14:23 +0000 (20:14 +0200)]
pwclient: rename variable CONFIG_FILES to be singular

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>
7 years agofilters: fix exception in filter querystring generation
Jeremy Kerr [Thu, 8 May 2014 05:53:09 +0000 (13:53 +0800)]
filters: fix exception in filter querystring generation

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>