Commit Graph

2842 Commits

Author SHA1 Message Date
Evan Prodromou 464ce741a4 remove session info in syslog 2010-01-13 16:19:20 -08:00
Brion Vibber 0e1f2d4b47 Fix regressions in XMPP output during inbox refactoring
- NOTICE_INBOX_SOURCE_* constants moved to common.php since Notice_inbox.php not always loaded
- fixed typo in User::staticGet() call which caused user #1 to receive messages once for each subscriber instead of for him/herself
- 'continue' -> 'continue 2' inside switch() statement to fix loop escape (PHP considers switch() a looping construct for break & continue)
2010-01-13 18:17:36 +00:00
Sarven Capadisli 2000d2d36b Added timeout error handling for geo location 2010-01-13 15:36:42 +00:00
Sarven Capadisli 9b2fdefe39 Using a JSON object for NoticeDataGeo text instead 2010-01-13 15:21:43 +00:00
Evan Prodromou 430bd69312 add events for subscribing to people and joining groups 2010-01-13 02:16:13 -08:00
Evan Prodromou 23599da91e refactor jabber broadcast for notice_inbox removal 2010-01-13 01:13:49 -08:00
Evan Prodromou 155e4ef4f3 remove some debugging statements from util.php 2010-01-12 23:58:25 -08:00
Evan Prodromou cc25d3baf0 ws changes for phpcs 2010-01-12 23:56:21 -08:00
Evan Prodromou e34ece8b06 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2010-01-12 23:25:25 -08:00
Brion Vibber ec145b73fc Major refactoring of queue handlers to support running multiple sites in one daemon.
Key changes:
* Initialization code moved from common.php to StatusNet class;
  can now switch configurations during runtime.
* As a consequence, configuration files must now be idempotent...
  Be careful with constant, function or class definitions.
* Control structure for daemons/QueueManager/QueueHandler has been refactored;
  the run loop is now managed by IoMaster run via scripts/queuedaemon.php
  IoManager subclasses are woken to handle socket input or polling, and may
  cover multiple sites.
* Plugins can implement notice queue handlers more easily by registering a
  QueueHandler class; no more need to add a daemon.

The new QueueDaemon runs from scripts/queuedaemon.php:

* This replaces most of the old *handler.php scripts; they've been refactored
  to the bare handler classes.
* Spawns multiple child processes to spread load; defaults to CPU count on
  Linux and Mac OS X systems, or override with --threads=N
* When multithreaded, child processes are automatically respawned on failure.
* Threads gracefully shut down and restart when passing a soft memory limit
  (defaults to 90% of memory_limit), limiting damage from memory leaks.
* Support for UDP-based monitoring: http://www.gitorious.org/snqmon

Rough control flow diagram:
QueueDaemon -> IoMaster -> IoManager
                           QueueManager [listen or poll] -> QueueHandler
                           XmppManager [ping & keepalive]
                           XmppConfirmManager [poll updates]

Todo:

* Respawning features not currently available running single-threaded.
* When running single-site, configuration changes aren't picked up.
* New sites or config changes affecting queue subscriptions are not yet
  handled without a daemon restart.
* SNMP monitoring output to integrate with general tools (nagios, ganglia)
* Convert XMPP confirmation message sends to use stomp queue instead of polling
* Convert xmppdaemon.php to IoManager?
* Convert Twitter status, friends import polling daemons to IoManager
* Clean up some error reporting and failure modes
* May need to adjust queue priorities for best perf in backlog/flood cases

Detailed code history available in my daemon-work branch:
http://www.gitorious.org/~brion/statusnet/brion-fixes/commits/daemon-work
2010-01-12 20:45:09 -08:00
Brion Vibber 2b10e359fe Avoid PHP notice when outputting API data for remote users; no $user means no $user->timezone :)
Trying to get property of non-object (/srv/com.leuksman.status/lib/api.php:171)
2010-01-12 12:28:24 -08:00
Evan Prodromou 392bc728c7 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2010-01-12 12:11:37 -08:00
Brion Vibber cbc3c7b141 Ticket 2152: avoid fatal when php.ini disables dl via disabled_functions (function_exists returns false even though it exists and cannot be redefined) 2010-01-12 07:24:43 -08:00
Evan Prodromou 7e5c15fa80 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2010-01-11 16:23:48 -08:00
Zach Copley 3a9e24e077 Fix format specifier on page title 2010-01-11 23:21:09 +00:00
Evan Prodromou 57ac912519 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2010-01-11 15:12:13 -08:00
Evan Prodromou 5d676352c3 strip out session ID from root URL 2010-01-11 15:09:46 -08:00
Sarven Capadisli c7b768b4c8 Removed period 2010-01-11 16:33:46 +01:00
Evan Prodromou 8809e577b2 Merge branch 'sessionidparam' into 0.9.x
Conflicts:
	lib/command.php
2010-01-11 00:45:26 -08:00
Evan Prodromou ae7469a127 accept session from 2010-01-11 08:39:02 +00:00
Evan Prodromou e0eb51e4bb add session ID to local URL when server parts differ 2010-01-10 23:51:57 -08:00
Evan Prodromou dd7195346c Sever -> server in error message 2010-01-10 22:59:50 -08:00
Evan Prodromou ad63a9518c Sever -> server in error message 2010-01-10 22:59:32 -08:00
Evan Prodromou 15b88697a7 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2010-01-10 14:18:54 -08:00
Evan Prodromou 866dfa6822 Merge branch 'master' into 0.9.x
Conflicts:
	classes/Memcached_DataObject.php
2010-01-10 14:18:19 -08:00
Evan Prodromou 7aa43f3c93 defaultDesign was undefined; fixed that 2010-01-10 14:10:31 -08:00
Evan Prodromou 6fdd52467d catch exceptions from snapshot 2010-01-10 14:06:52 -08:00
Zach Copley 63eddf216f Fix routes for social graph API methods -- this takes care of Ticket #2151 2010-01-10 14:03:10 -08:00
Evan Prodromou 8cf1ef862d catch exceptions from snapshot 2010-01-10 13:54:26 -08:00
Evan Prodromou 30409f7bad debugging code to find passed-in objects in munge_password 2010-01-10 12:07:49 -08:00
Siebrand Mazeland 4af6b7f5c3 Lots of tiny message changes.
* Mostly punctuation updates so that the same message is used consistently in all of StatusNet.
* Some cases of "Title Case" removed, because that does not appear to be used consistently.
2010-01-10 12:26:24 +01:00
Siebrand Mazeland 0c4dbf1588 Merge branch '0.9.x' of git://gitorious.org/statusnet/mainline into 0.9.x 2010-01-10 01:46:39 +01:00
Siebrand Mazeland b0aea3f9c1 * L10n updates: consistent puctuation
* i18n updates: number parameters if more than one are being used
2010-01-10 01:45:58 +01:00
Craig Andrews 7dde17862a i18n work in the mail handler 2010-01-09 19:04:53 -05:00
Evan Prodromou ed5828f30e Redirect to a one-time-password when ssl and regular server are different 2010-01-09 15:26:06 -08:00
Craig Andrews 055f3fdddb Add an IMAP daemon so StatusNet can process incoming user posts via catch-all mailbox (in addition to the pre-existing script alias method) 2010-01-08 18:52:43 -05:00
Sarven Capadisli 8901e01692 Added i18n text for @title values in geo sharing actions 2010-01-08 18:07:02 +00:00
Sarven Capadisli 54c18e68da Some code cleaning for geo UI 2010-01-08 13:58:23 +00:00
Sarven Capadisli 0fcd91cf1e Using json2.js 2010-01-08 13:26:48 +00:00
Evan Prodromou 2aa0ab9777 let system administrators disallow certain admin panels 2010-01-08 01:00:29 -08:00
Evan Prodromou 505cd382f3 ptiturl.com correct name 2010-01-07 23:38:19 -08:00
Evan Prodromou 9693b2cf2f add default plugin version information 2010-01-07 17:33:46 -08:00
Evan Prodromou 4a4ac7a108 add a version action to give credit and list plugins 2010-01-07 17:26:40 -08:00
Evan Prodromou 2c33e61b94 add default plugins and load them 2010-01-07 16:13:36 -08:00
Ciaran Gultnieks 14421d9db3 Correction to previous commit 2010-01-07 21:01:07 +00:00
Ciaran Gultnieks deeaafe712 Fixes to bugs where non-local messages were being wrong put in the public timeline and public xmpp feed 2010-01-07 20:59:31 +00:00
Evan Prodromou f4fa785fb7 Revert "Ticket 2107: remove "not implemented" items from sms/xmpp help; nobody likes being told what they can't do!"
This reverts commit 5d9a2eb17e.

These are commands that are/were implemented by Twitter, and we don't
(yet) implemented. People will be looking for that information.
2010-01-06 23:24:24 -08:00
Brion Vibber 5d9a2eb17e Ticket 2107: remove "not implemented" items from sms/xmpp help; nobody likes being told what they can't do!
Also broke up the localized help message into line-by-line pieces to ease translation maintenance.
2010-01-06 14:42:46 -08:00
Craig Andrews 541053e84b The structure return by parse_url is an associative array, not an object. 2010-01-06 17:08:01 -05:00
Zach Copley d6db8e5817 Don't output notices from deleted users. 2010-01-06 13:43:46 -08:00
Zach Copley 013e6dfdd4 Don't output notices from deleted users. 2010-01-06 13:40:28 -08:00
Zach Copley 9960ec2143 Support an 'extra' clause when definining a column (e.g.: 'on update
CURRENT_TIMESTAMP').
2010-01-05 23:19:13 -08:00
Brion Vibber aff78e5121 Cache fixes:
* We now cache negative lookups; clear them in Memcached_DataObject->insert()
* Mark file.url as a unique key in statusnet.ini so its negative lookups are cleared properly (first save of a notice with a new URL was failing due to double-insert)
* Now using serialization for default in-process cache instead of just saving objects; avoids potential corruption if you save an object to cache, change the original object, then fetch the same key from cache again
2010-01-05 15:05:53 -08:00
Craig Andrews 250bcfa8dc Require users to login to view attachments on private sites
Thank you jeff-themovie for this implementation!
2010-01-05 17:49:28 -05:00
Craig Andrews 9e2e0605ed Move Authorization and Authentication plugin structures into core, instead of as plugins.
This move makes sense as you can addPlugin('Authentication') for example - these are abstract classes designed to be implemented, not used directly.
2010-01-05 13:56:22 -05:00
Brion Vibber 16254c14c8 Typo fix in the new default in-process cache; spewed notice warnings on deletion, breaking XHR responses. 2010-01-05 09:54:43 -08:00
Brion Vibber af95005bc4 Ticket 2141: bugs with weighted popularity lists across year boundary.
Consolidated several separate implementations of the same weighting algorithm into common_sql_weight() and fixed some bugs...
For MySQL, now using timestampdiff() instead of subtraction for the comparison, so we get sane results when the year doesn't match, and utc_timestamp() rather than now() so we don't get negative ages for recent items with local server timezone.
Unknown whether the same problems affect PostgreSQL, but note that it lacks the timestampdiff() SQL function.
2010-01-04 13:01:17 -08:00
Evan Prodromou 6add2693b0 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2010-01-04 10:55:21 -10:00
Evan Prodromou a1821ec8af default value for cache::get() changed from null to false 2010-01-04 09:59:47 -10:00
Brion Vibber 6911e1c797 Ticket 2141: bugs with weighted popularity lists across year boundary.
Consolidated several separate implementations of the same weighting algorithm into common_sql_weight() and fixed some bugs...
For MySQL, now using timestampdiff() instead of subtraction for the comparison, so we get sane results when the year doesn't match, and utc_timestamp() rather than now() so we don't get negative ages for recent items with local server timezone.
Unknown whether the same problems affect PostgreSQL, but note that it lacks the timestampdiff() SQL function.
2010-01-04 11:55:27 -08:00
Brion Vibber 783a2e249b Fix for auto_increment parameter in auto-created tables via checkschema.
Update FeedSub plugin for non-Plugin_DataObject setup and working checkschema updates.
2010-01-04 10:30:58 -08:00
Evan Prodromou bfa3aa0e7f Remove logging from default cache 2010-01-03 11:28:15 -10:00
Evan Prodromou de74c64490 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2010-01-02 21:35:46 -10:00
Evan Prodromou cc5534d180 First version of Memcache plugin 2010-01-02 21:16:59 -10:00
Evan Prodromou 1e1062ca9c Make cache.php PHPCS-clean 2010-01-02 21:00:42 -10:00
Evan Prodromou 65d07b657d invert if for cache handling 2010-01-02 20:37:30 -10:00
Evan Prodromou e1de1bf0fe fix default array implementation checks 2010-01-02 20:32:56 -10:00
Evan Prodromou c5d23e27a6 Make caching a plugin system 2010-01-02 20:26:33 -10:00
Evan Prodromou 3b912ac97e fixup memcache functions 2010-01-02 16:27:04 -10:00
Sarven Capadisli ec5850d26a Changed location share representation to be more like the file
attachment. Init UI. Probably a little buggy.
2010-01-03 00:33:41 +00:00
Evan Prodromou a9d8359208 Merge branch 'master' into 0.9.x
Conflicts:
	classes/Memcached_DataObject.php
2010-01-01 11:20:25 -10:00
Sarven Capadisli 01dbee2ba5 Initial UI for geo location share option in notice form 2009-12-31 18:41:10 +00:00
Sarven Capadisli dde6415a6a Moved JavaScript dependant stuff out of noticeform. 2009-12-31 18:08:21 +00:00
Sarven Capadisli 8872d91483 Removed style information out of HTML 2009-12-31 16:44:24 +00:00
Sarven Capadisli 0320bf2fb3 Use the location setting profile as secondary 2009-12-31 15:46:43 +00:00
Sarven Capadisli 8e6a8961d9 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2009-12-31 14:37:23 +00:00
Sarven Capadisli c986f59143 If user is sharing their location (based on profile setting), then
enable it for form notice by default. This can be overriden by the
cookie to preserve states.
2009-12-31 14:34:07 +00:00
Sarven Capadisli 4efa841ba3 If user doesn't want to share their location (which is globally set
from their profile settings), don't bother to output form data for
lat/long in the notice form.
2009-12-31 14:24:27 +00:00
Sarven Capadisli 923e27b01a Fix to grab and use the actual lat/lon values from the user profile 2009-12-31 14:23:11 +00:00
Sarven Capadisli 5871480844 Moved shareLocation data from formActions() to formData() 2009-12-31 12:52:39 +00:00
Sarven Capadisli 4985582880 Fixed Event end name 2009-12-31 12:43:33 +00:00
Craig Andrews 1e9c03e199 Enable memcache automatic compression, starting at 20k and only if compression gain is greater than 20%.
Allows storage of larger objects (over 1mb in size uncompressed), such as huge LDAP schemas.
Should also improve cache efficiency (allows more stuff to be stored in same memory) and reduce network latency (less data transfer)
2009-12-30 19:29:38 -05:00
Siebrand Mazeland 024704e0b7 Remove trailing space in checkbox text. 2009-12-30 20:26:23 +01:00
Craig Andrews 98ce7daf56 Implement user interface for user to preview what location they are sharing with a notice 2009-12-29 16:18:52 -05:00
Evan Prodromou 360fdb219d don't show notices with deleted profiles 2009-12-29 12:25:41 -08:00
Evan Prodromou e119362fde Merge branch 'locshunt' into 0.9.x 2009-12-28 15:49:27 -08:00
Evan Prodromou 39bdda9c7e More configuration options for location sharing 2009-12-28 14:43:34 -08:00
Evan Prodromou bb93d6b1c7 remove namespace setting from location; it's unused 2009-12-28 14:21:07 -08:00
Evan Prodromou da5db060e8 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2009-12-23 14:31:56 -08:00
Sarven Capadisli 05c1ad8b32 Updated Repeat notice option submit button style 2009-12-23 15:59:31 -05:00
Evan Prodromou 1adce16dd8 don't email replies to yourself 2009-12-23 09:00:05 -08:00
Evan Prodromou 185e229f79 Merge branch 'master' into 0.9.x 2009-12-22 22:12:15 -08:00
Evan Prodromou f6bf952980 Merge branch 'testing' 2009-12-22 16:44:19 -08:00
Evan Prodromou 30c2e2ce83 update to rc2 2009-12-22 16:41:39 -08:00
Evan Prodromou a2cb0a033f Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2009-12-22 08:53:50 -08:00
Brion Vibber a06af3f125 Ticket 1982: define LC_MESSAGES and friends if PHP didn't predefine them for us. (Known problem on Win32) 2009-12-21 09:06:07 -08:00
Brion Vibber f987273f11 Ignore user language settings that aren't listed in language config; we'll then fall back to current autodetection. This prevents the surprises where your profile suddenly switches to Arabic because it was selected by default due to lack of a match in the drop-down box. 2009-12-21 06:57:10 -08:00
Siebrand Mazeland 7e6efd1065 Localisation updates for !StatusNet from !translatewiki.net !sntrans
* Adding Persian language
2009-12-20 15:52:43 +01:00
Brion Vibber b244ac6462 Ignore user language settings that aren't listed in language config; we'll then fall back to current autodetection. This prevents the surprises where your profile suddenly switches to Arabic because it was selected by default due to lack of a match in the drop-down box. 2009-12-19 15:29:53 -05:00
Evan Prodromou 530673b3cd Merge branch '0.9.x' into testing 2009-12-16 22:14:41 -05:00
Brion Vibber dc4bedd25a Add some doc comments and fixmes in util.php 2009-12-16 09:27:48 -05:00
Brion Vibber 0158f4f73d PHP 5.3 closure-based implementation of curry(); old implementation used as fallback for older PHP versions. Added unit tests to confirm they both work! 2009-12-16 09:27:48 -05:00
Evan Prodromou 2a1468ec8b Merge branch '0.9.x' into testing 2009-12-15 16:24:52 -05:00
Evan Prodromou 608d1b206a Don't show repeater avatar in notice lists 2009-12-15 16:08:44 -05:00
Evan Prodromou 797a0d79fb create a method for notification for new messages, and use it 2009-12-15 10:31:25 -05:00
Evan Prodromou 19bb9a04d1 add mail notification for dm command results 2009-12-15 10:18:27 -05:00
Sarven Capadisli 27d0e8f0a4 Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2009-12-14 18:34:16 -05:00
Evan Prodromou 43ee2ec42f default for login command is disabled 2009-12-14 18:09:30 -05:00
Sarven Capadisli f8b187d5a4 Initial representation for repeated notice 2009-12-14 18:09:08 -05:00
Evan Prodromou 607e98ee11 make sure id of <li> in notice list is unique 2009-12-14 17:48:14 -05:00
Evan Prodromou d22364b35e had the order of <status> and <retweeted_status> wrong in api output 2009-12-14 17:11:34 -05:00
Evan Prodromou 9384a6e242 fix error with cached repeat of deleted original in api output 2009-12-14 16:40:56 -05:00
Evan Prodromou 6ff13d6828 move full-featured timeline to apitimelinehome.php 2009-12-14 16:10:16 -05:00
Evan Prodromou 9d2a605d0e correct link for repeat attribution in noticelist 2009-12-14 15:42:53 -05:00
Zach Copley a199bd808a Fix issue with favorited/following always being set to false 2009-12-14 18:16:45 +00:00
Sarven Capadisli 7dc9f7ad06 Init UI for Repeated by 2009-12-13 20:00:09 -05:00
Siebrand Mazeland 745e35ac1f (Puctuation) consistency in clientError() calls. 2009-12-13 18:55:17 +01:00
Siebrand Mazeland 954eb411e0 Localisation updates for !StatusNet from !translatewiki.net !sntrans
* add Interlingua (ia)
2009-12-13 18:31:14 +01:00
Craig Andrews bed4e1c9e9 Add repeat command 2009-12-12 21:25:21 -05:00
Evan Prodromou 304ba80a0f make sure to show repeats correctly when original is deleted 2009-12-12 16:33:38 -05:00
Evan Prodromou a5a89f50b8 Merge branch 'forward' into 0.9.x 2009-12-12 16:18:55 -05:00
Evan Prodromou cc063aedcc Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x 2009-12-12 16:15:47 -05:00
Evan Prodromou 1ec54d3433 add statuses/retweeted_to_me to API 2009-12-12 16:15:23 -05:00
Evan Prodromou cfe67a9c01 add statuses/retweets_of_me to API 2009-12-12 16:00:27 -05:00
Evan Prodromou 138ce0cd05 add statuses/retweeted_by_me api action 2009-12-12 15:35:05 -05:00
Evan Prodromou a3660fbea4 Merge branch '0.9.x' into forward 2009-12-12 15:00:22 -05:00
Evan Prodromou b42b2e1d05 integer utility for arguments 2009-12-12 15:00:09 -05:00
Evan Prodromou c622d14440 add statuses/retweets to API 2009-12-12 14:46:24 -05:00
Siebrand Mazeland 78a649ca0a Localisation updates for !StatusNet from !translatewiki.net !sntrans
* add Egyptian Spoken Arabic (arz)
2009-12-12 18:21:57 +01:00
Hue Bastard 59e5958d3a ticket 2055: added logos to Atom and RSS feeds 2009-12-11 16:15:22 -08:00
Evan Prodromou 683edfd199 show repeated notices correctly in API output 2009-12-11 12:40:05 -05:00
Evan Prodromou 1c370bb277 show repeated notices correctly in API output 2009-12-11 12:39:29 -05:00
Evan Prodromou 962f391f3e show original notice in repeat, with repeat info below 2009-12-11 12:10:58 -05:00
Evan Prodromou afc86a86d3 save repeats from the form 2009-12-11 11:51:09 -05:00
Evan Prodromou 60754fc6de Merge branch '0.9.x' into forward 2009-12-11 11:38:08 -05:00
Evan Prodromou 79f81ad76d change Notice::saveNew() to use named arguments for little-used options 2009-12-11 11:29:51 -05:00
Evan Prodromou 81843f2acd show the repeat form in notice lists 2009-12-11 10:49:26 -05:00
Evan Prodromou a5724cca49 do some moving around of forwarding stuff 2009-12-11 10:10:25 -05:00
Evan Prodromou e9b733e7f0 Merge branch '0.9.x' into testing 2009-12-11 09:55:47 -05:00
Evan Prodromou eceb5e8a0f remove forward action from router 2009-12-10 14:42:13 -05:00
Evan Prodromou 37b0852fdb move forward form to plugin 2009-12-10 14:33:15 -05:00
Craig Andrews b36ec6da87 Fixed incorrect disabling of login_token. 2009-12-10 13:22:46 -05:00
Craig Andrews b07e1143cc Override login_token's sequenceKey() so that it behaves correctly 2009-12-10 13:08:24 -05:00
Sarven Capadisli 1e166e1bc4 Updated FormNoticeEnhancements and Counter to use the max text value
from HTML. It also allows each .form_notice to have its own counter.
2009-12-10 14:16:07 +01:00
Brion Vibber 2f59f0ddb5 Compat fix for PHP 5.2.4 -- drop unneeded new param to debug_backtrace(), caused error spew on older PHP (introduced PHP 5.2.5)
Fix for regression in 4b5e977a7b
2009-12-08 17:35:27 -08:00
Evan Prodromou 21757186e9 don't allow forwarding your own notice 2009-12-08 17:52:20 -05:00
Evan Prodromou 41cbb90fae add (ugly) form to forward notices 2009-12-08 17:31:23 -05:00
Evan Prodromou 48a93810ab action to forward a notice 2009-12-08 17:20:45 -05:00
Brion Vibber 4b5e977a7b New _m() gettext wrapper with smart detection of plugin domains. Plugin base class registers your gettext files if present at initialization.
update_pot.sh replaced with update_po_templates.php which can do core, plugins, or all (default).
Top-level Makefile added to build .mo files for plugins as well as core.

As described on list:
http://lists.status.net/pipermail/statusnet-dev/2009-December/002869.html
2009-12-08 12:17:11 -08:00
Evan Prodromou 78fc9483d4 Merge branch '0.9.x' into testing 2009-12-08 14:43:21 -05:00