Fetching contributors…
Cannot retrieve contributors at this time
478 lines (428 sloc) 24 KB
Revision history for Perl extension PGXN::Manager
0.16.0 2015-08-31T18:25:24Z
- Updated the `Makefile` example in the HOWTO to extract the extension
version from the `META.json` file, rather than the distribution
- Updated the `Makefile` example in the HOWTO to avoid trying to
install the extension file twice, which causes an error on
PostgtreSQL 9.3.2.
- Twitter posts now sent over SSL.
- Fixed warnings on Perl 5.20.
- Fixed encoding issues with Perl 5.20 and DBD::Pg 3.0.
- Fixed pgxn_maint so that reindexing failures are reported on the
command-line and the exit value set to the number of failures.
Previously it would fail silently.
- Added the ability to pass the path to a zip archive to `pgxn_maint
index`. Previously, you had to pass a distribution name and release
version (and you still can), but that required that one manually
place the archive where the existing one is, first. This is cleaner,
as now `pgxn_maint` will process the file from wherever you have it
and put it where it belongs.
- Distribution versions are now forced to be greater than in previous
- Extension versions are now required to be greater than or equal to
versions in previous releases. When re-indexing, they are also
required to be less than or equal to versions in subsequent releases.
0.15.0 2013-06-19T06:18:45Z
- Silenced Net::Twitter::Lite warnings by disabling the legacy lists
API (which we don't use anyway).
- Updated upload tweeting to use the Twitter v1.1 API, as the v1 API is
no more.
- Fixed test failures due to changes in behavior in
Email::Sender::Simple v0.120000.
- Requiring SemVer v0.4.0 and pg-semver 0.3.0. These releases support a
dash before the prerelease version, as required by the final semver
1.0.0 spec.
- Fixed a test failure due to the recently introduced restriction where
different users cannot access the same `%_SHARED` hash in PL/Perl
functions. Fixed by switching to a temporary table.
- Removed superfluous commas from a JSON exmple in the PGXN spec
document. Thanks to Jörg Beyer for the spot!
- Eliminated smartmatch deprecation warnings on Perl 5.18.0.
- Fixed test failures on Perl 5.18 due to hash randomization.
- The build system now tries to always run the tests as the database
super user. This allows mocked functions in the tests to work
- Updated the HOWTO to properly order things in the `Makefile` and to
include a `dist` target.
- Added `remote_host()` and `address()` to PGXN::API::Request to return
the forwarded host name and address, if present. This should allow
the proper host information to be included in the registration admin
email (issue #38).
- Tweaked the hint for the nickname field in the registration form to
indicate that it will be the user's PGXN user name.
0.14.1 2012-01-11T18:29:26Z
- Greatly improved the `check_mirrors` utility, making it work with the
`mirrors` file, rather than a special, undocumented "timestamp" file.
0.14.0 2012-01-10T04:10:22Z
- Changed the `utc_date()` function from IMMUTABLE to STABLE, because
converting between time zones is not immutable, alas.
- Removed use of `catch` blocks with DBIx::Connector, switching to
Try::Tiny. This is because DBIx::Connector deprecated its support of
`catch` blocks in v0.46.
- Updated for PostgreSQL 9.1 `CREATE EXTENSION` support.
- Added `Capfile` for capistrano deployment.
- Added `eg/debian_init`, an example init script for Debian that runs
PGXN::Manager on Starman.
- Now require PGXN::Meta::Validator v0.14.0, which has much nicer error
- Fixed version issues. All classes now have a version and the
`version_string` class method of PGXN::Manager should be used for
displaying the version.
- Commented out the `MODULES` line in the example `Makefile` in the
How-To, as it turns out that it's not as harmless as I thought for
extensions with no C code. Reported by Daniele Varrazzo.
- Added credit to Veerle Pieters for table design and to Miles Ponson
for icons to the About page.
- Updated the metadata spec to 1.0.0.
- Allow Build.PL to execute when Module::Build::DB is not installed.
This makes it easier to run once to determine what dependencies are
required, including Module::Build::DB.
- A request to / no longer returns a redirect to /pub/, bur rather a
"forbidden" response (403) explaining that you probably wanted /pub/
or to run PGXN Manager behind a rerverse proxy server.
- Documented reverse proxy configuration with Nginx in the README.
0.13.1 2011-06-01T04:26:20
- Replaced a leftover `ORDER BY semver USING <` with `ORDER BY semver
ASC`, as it was causing errors on the "Your Distributions" page and
hasn't been needed since the `semver` domain was replaced with the
`semver` C data type.
0.13.0 2011-06-01T03:51:17
- Added version ranges to the spec. These may be used in the `prereqs`
field to specify precise version requirements. Stolen directly from
CPAN::Meta Spec 2.0.
- The "provides" field is now required by the meta spec.
- Fixed embarrassing typo on the home page. Thanks to Stefan
Kaltenbrunner for the spot.
- The hints for creating user names now specify that only ASCII letters
are supported. Thanks to Stefan Kaltenbrunner for the gripe.
- Added a link to the mail list to the contact page. Suggested by Stefan
- Submitting an empty forgotten form no longer returns a 500 error, but
a nice 400 error and the form to properly fill in. Reported by Stefan
- Tag names may no longer contain slashes, backslashes, or control
characters, and must be 256 characters or less.
- Extension names may no longer contain slashes, backslashes, control
characters, or space characters.
- Eliminated "Wide character in print" warnings.
- Added the "conflicts" relationship to the meta spec `prereqs` field.
- Now using PGXN::Meta::Validator to validate the `META.json` file on
upload and in the database. This will make it easier for users to
figure out what's wrong with their file when they try to release to
PGXN, while also enforcing the requirement for the `provides` field.
- Version numbers are no longer be normalized into semantic versions.
They now must be valid semantic versions on upload.
0.12.8 2011-05-12T23:57:44
- Updated the HOWTO to add details for better indexing and support for
the PostgreSQL 9.1 extension architecture.
0.12.7 2011-05-12T18:11:02
- Upgraded to jQuery 1.6.
- Distributions names containing control characters, whitespace
characters, /, and \ are now disallowed.
- Backported to Perl 5.10.
0.12.6 2011-05-03T21:06:43
- Fixed a bug where reindexing a distribution would cause the release
date to be updated in the generated `META.json` file (Issue #26).
- User JSON files will no longer output a "uri" key if the value is an
empty string (Issue #25).
- Added the `-E` option to `pgxn_maint`, to specify the environment in
which to run, just like the Plack app. This ensures that the proper
configuration file is loaded.
0.12.5 2011-04-27T18:52:18
- Changed the default download file suffix from `.pgz` to `zip`.
0.12.4 2011-04-25T16:59:36
- The directory prefix in rewritten zip files is now lowercase, just
like the zip file name.
- The zip file is now replaced when a distribution is re-indexed. This
is because re-indexing might have changed it.
0.12.3 2011-04-25T16:35:28
- Distribution and extension names, as well as version strings, should
now always be converted to lowercase before writing files to disk.
This is because all these values (as well as tags and nicknames, which
were already lowercased in file names) are case-insensitive. So while
preserving case in JSON files, force lowercase in file names for
- An attept to upload a file without actually selecting a file to upload
no longer causes a 500 error. A 400 error is returned instead,
presenting the user with the form.
0.12.2 2011-04-22T18:51:42
- Added another workaround to a MultiMarkdown bug to `doc/spec.txt`,
this time for MultiMarkdown's inability to properly parse a single-row
table. Hopefully these workarounds can be removed someday when
MultiMarkdown 3.0 is ported to Perl.
- Updated Meta Spec links to their new URL,,
and GitHub link to their new URL,
- The "provides" section of a `META.json` file is now properly
validated, so a missing version no longer triggers a 500 error, but
tells the user that the version is missing. Reported by Hitoshi
0.12.1 2011-04-20T05:59:39
- Fixed JSON writing in PGXN::Manager::Maint so that it properly writes
out UTF-8 encoded data read from the database.
0.12.0 2011-04-20T05:35:52
- Requests should now all be returned with an appropriate
`Content-Length` header.
- Updated `doc/spec.txt` to use MultiMarkdown definition list syntax and
curly quotation marks and apostrophes.
- Updated examples cited in `doc/spec.txt` to be actual PGXN
- Added the `docfile` key to the `provides` section of the meta spec. It
can be used to specify a path to documentation for an extension.
PGXN::Manage does nothing with this key, but PGXN::API uses it.
- A JSON file is now created for new users as soon as they're approved,
and is updated whenever the user updates her data via the UI. This
means that usr JSON files should now always be up-to-date, and will be
present even for users who have no distributions (yet).
- Added the `update_users` method to PGXN::Manager::Maint, which
implicitly also adds the `update-users` task to the `pgxn_maint`
0.11.1 2011-04-13T02:25:37
- Changed the volatility option on the `utc_date()` database function
from "stable" to "immutable".
- Added `num_to_list` param to the `all_stats_json()` database function.
- Changed the voltility of the `all_stats_json()` and
`get_distribution()` database functions from "volatile" to "stable".
- Changed the "spec" URL template to "/meta/spec.{format}".
0.11.0 2011-04-11T23:41:16
- Added JSON-emitting statistics functions:
* `tag_stats_json()`
* `user_stats_json()`
* `extension_stats_json()`
* `dist_stats_json()`
* `summary_stats_json()`
- Added more rows to the output of `add_distribution()`. The new rows
contain stats JSON, to be saved to the location specified by the new
"stats" URI template.
- Added "release_permalink" configuration, used to create the link to a
newly released distribution in the announcing Tweet.
- Added `update_distribution()` database function, which is just like
`add_distribution()` except that it updates an existing distribution.
- Added `get_distribution()` database function, which returns all the
JSON metadata as `add_distribution()`, but for an already-existing
- Added the `reindex()` method to PGXN::Manager::Distribution. It can be
used to reindex an existing distribution.
- Added `pgxn_maint` utility, and its implementation,
PGXN::Manager::Maint. Allows maintence tasks to be easily executed.
Supported tasks include:
* `update-stats`
* `reindex`
* `reindex-all`
- Added the PGXN Meta spec, as well as a URI template for it, "spec".
The file will be updated in the mirror root any time its modification
time is older than the copy in `doc/spec.txt`.
0.10.4 2011-03-28T02:01:11
- Renamed the "dist" URI template to "download".
- Removed the leading `/by` from the URI templates.
- Removed the leading `by_` from database functions.
0.10.3 2011-03-17T23:29:34
- Added the "sha1" key to the JSON objects describing the most recent
distributions for each release status in the `/by/extension/*.json`
files. This will allow a client to skip the downloading of the
distribution metadata file for a simple `install extension foo`
0.10.2 2011-03-16T23:11:33
- Changed the default URI templates to use `{dist}/{version}` instead of
`{dist}-{version}`. This allows versions to be more easily
distinguished from extension names in URIs. The three changed templates
"dist": "/dist/{dist}/{version}/{dist}-{version}.pgz",
"readme": "/dist/{dist}/{version}/README.txt",
"meta": "/dist/{dist}/{version}/META.json",
Note that existing installations should work fine with whatever
templates they have.
0.10.1 2011-03-15T18:31:23
- Fixed a bug in the upload code where a failure to recognize an archive
was not returned to the client. Reported by Alexey Klyukin (Issue #4).
- Now requiring HTTP::Body 1.08 or higher so that upload file name
extensions are preserved. This allows Archive::Extract to properly
detect the type of an extension.
0.10.0 2011-03-10T21:53:17
- Removed conflicting meaning of the term "owner". It now is used only
in the context of permissions: who owns or co-owns.a particular
extension. The user who uploads a distribution is now recorded as the
"creator" of that extension, and listed in the JSON metadata simply as
the "user". The term "creator" is not used here because the user who
created the distribution (that is, uploaded it) should not be confused
the the person who created the code in the distribution.
To enact this change in terminology, the these changes have been made
to the code and its outputs:
* Renamed the `distributions.owner` column to `distributions.creator`.
* Renamed the "owner" key in the distribution metadata file to "user".
* Renamed the "owner" attribute in PGXN::Manager::Distribution to
* Moved the `/by/owner/` metadata files to `/by/user/`.
* Renamed the `by_owner_json()` SQL function to `by_user_json()`.
* Changed the name of the URI template for the user JSON output by
`add_distribution()` to `by-user`.
- Renamed the "release_date" in the distribution metadata output file to
"date", so that it's the named consistently with the key that appears
in the `by_user_json()`, `by_dist_json()`, and `by_tag_json()` JSON.
0.9.1 2011-03-09T23:59:58
- Changed "releases" status values in the `by_tag_json()` output from a
list of versions to a list of objects with a "version" key and a
"date" key, to match the output from `by_dist_json()` and
0.9.0 2011-03-09T21:35:11
- Removed extra space from generated extension JSON.
- Removed `NO_PGXS` stuff from the `Makefile` example in the HOWTO.
Suggested by Alvaro Herrera.
- Added the "twitter" key to the owner JSON output.
- Added the "mirrors" URI template to included configuration files.
Existing installations will need to update their `/index.json` files
- Changed "releases" status values in the `by_dist_json()` and
`by_owner_json()` output from a list of versions to a list of objects
with a "version" key and a "date" key.
0.8.0 2011-02-25T23:56:37
- Added `abstract` column to `distribution_extensions` and the
`abstract` key to the `provides` section of the JSON output.
0.7.0 2011-02-25T01:22:32
- Fixed JSON handling inside the database to properly handle UTF-8
- Added `release_date` key to the JSON file generated for a
0.6.1 2011-02-11T00:08:46
- Added `--help` option to `get_twitter_token`.
- Updated to use native `semver` data type now distributed on PGXN.
0.6.0 2011-01-05T03:24:51
- Added Twitter notification upon successful updload.
- Added `bin/get_twitter_token`, a utility to make configuring
the Twitter OAuth token relatively simple.
- Consolidated the sending of email into a single method, `send_email`
in PGXN::Manager.
- Fixed a bug in our exception-handling code to properl include the
exception message along with the stack trace in log, UI, and email
0.5.1 2011-01-04T22:54:12
- Updated `check_mirrors` for new `mirrors.json` format.
- Fixed the encoding of `mirrors.json` so that UTF-8 will be properly
encoded in the file.
0.5.0 2011-01-04T21:47:29
- Added `doc/`.
- Moved `check_mirrors` from the PGXN repository.
- Tweaked the nav menu a bit:
* Eliminated the "Admin Menu" header.
* Added `hr`s between menus.
* Made the type a little smaller.
* Fixed borders so menu items don't move between loads.
- Removed the copyright statement from every page.
- Audied module usage and made the list in `Build.PL` comprehensive.
- Updated the DBIx::Connector requirement to 0.42, which has an
exception-handling fix.
- Updated Router::Resource requirement to 0.11, which has a header
fix for the method missing exception.
- Changed PGXN::Manager::Controller to have a constructor and be used as
an instance.
- Added mirror administration:
* Added the `update_mirror()` PL/pgSQL function.
* Add, update, and delete mirrors.
* Only available to administrators.
* Uses PUT and DELETE HTTP methods for updates and deletes.
* Requires Plack::Middleware::MethodOverride to support said
methods from browsers.
* Keeps `meta/mirrors.json`in the mirror root up-to-date.
0.4.5 2010-11-01T19:13:51
- Updated for storage of stack trace by Plack::Middelware::StackTrace in
Plack 0.9951.
- Fixed permission inssue when an uploaded file is moved rather than
- Removed stack trace from error environment in the 500 error emails. It
was ugly and redundant, considering that it's included as a separate
0.4.4 2010-10-29T17:59:12
- Updated `Makefile` example in /howto.
- Updated meta spec URL in /howto.
0.4.3 2010-10-24T21:32:59
- Fixed internal server error on /howto page. Turns out that
Data::Section isn't too fork safe when subclasses are loaded in a
child thread. So moved the howto body into the normal locale
- Move default lexicon strings from PGXN::Manager::Locale::en to
PGXN::Manager::Locale so that other locales can take advantage of
them. That is, Locale::fr does not inherit from Locale::en.
0.4.2 2010-10-22T20:50:49
- Added credits to the About page.
0.4.1 2010-10-22T19:22:50
- Changed error controller action so that it only sends email if called
as an `ErrorDocument` middleware subrequest. This is to prevent bogus
emails if people just hit its URL directly.
0.4.0 2010-10-22T19:21:50
- Improved internal server error handling. Now errors will be sent to
the alert email address.
0.3.0 2010-10-21T23:31:46
- Added salutation to new user email.
- Fixed a bunch of warnings emitted by the Perl code (found by turning
on warnings in tests)
- Added "How To" page and tweaked the "Contact", "About Us", and
"Upload" pages, including appropriate links to "How To".
0.2.5 2010-10-20T23:06:48
- Added descriptions of fields to the registration/profile form. Should
make things less confusing to folks signing up. In response to a gripe
from Damien Clochard.
0.2.4 2010-10-20T17:21:31
- Fixed redirection after successful registration and password reset to
go to the proper place.
0.2.3 2010-10-20T17:12:53
- Built out the 500 error page, which is a static file, based on other
error pages.
- Fixed misspelling in the user registration alert email. Also added
a link to the moderation UI.
- Renamed `Request->login_uri` to `auth_uri`, and renamed the
configuration setting to same.
- Added `Request->auth_uri_for()` and updated places in the public site
that link to the auth site to use it.
- Moved the password reset form (to which a link is set when a new user
account is accepted or a user fills in the forgotten password form) to
the auth site, where it belongs. This is the only part of the auth
site that does not require authentication.
0.2.2 2010-10-20T00:29:41
- Added Error document support for production.
- Fixed registration form URL to point to the right place.
0.2.1 2010-10-19T06:07:02
- Added version, copyright, and license to footer.
- Fixed display of form legends on Firefox so that they're not floating
above the fieldset with which they're associated.
0.2.0 2010-10-19T04:19:54
- Added build and installation instructions to ``.
- Added missing dependencies on Plack::Middleware::Session and
Email::Address to `Build.PL`.
- Added `conf/prod.json`. I think the usage will be pretty typical, and
it will be nicer for folks just to have a file to edit.
- Changed Archive::Extract error handling in PGXN::Manager::Distribution
to always die with our custom erorr message, rather than try to parse
the original error message, which can vary depending on the
implementation of `tar`.
- Fixed a test failure when looking at the sha1 in `t/distview.t`.
- Fixed a test failure on Test::More 0.95_01 or higher when comparing a
string to a string-overloaded Email::Address object. Just turn the
Email::Address into a string to compare instead.
- Initialize the mirror root on startup in `bin/pgxn_manager.psgi`.
- User access time is now updated on authentication. Conveniently, the
`authenticate_user()` function is called every time the user visits
the site and is logged in.
- Now using a subdirectory of the temp directory named
"pgxn-session-$ENV{PLACK_ENV}" to store the session files. This
prevents the polution of /tmp with a lot of junk.
- Change mounts so that the public site is mounted under /pub/ and the
auth site is mounted under /auth/. They are now effectively separate
apps. This allows them to be separately reverse-proxied.
- Rename `conf/prod.json` to `conf/local.json`. The `README` now says
to copy this file to `conf/prod.json` and edit the copied file.
- Added `conf/proxied.json`. This will serve as an example for setting
up PGXN::Manager to run behind a reverse proxy server.
- Recommend Plack::Middleware::ReverseProxy. I think it's likely that
the app will usually be run behind a reverse proxy server.
- Added the `uri_script_name_key` and `login_uri` configuration keys.
They have useful defaults but should be tweaked if /pub/ and /auth/
are behind separate reverse proxy servers.
- Switched router to Router::Resource. It's more RESTy and also offers
handling of 404s and 405s.
- Copyright retroactively assigned exclusively to David E. Wheeler,
rather than to both PostgreSQL Experts and David.
- An email is now sent when a new user registers. This is so that admins
can be quickly alerted to registrations and moderate them ASAP.
0.1.0 2010-10-08T01:51:55Z
- Initial version.